我正在使用Embarcadero RAD Studio的评估版。我为静态库中的代码获取了不同的DBL_MAX值,并在主应用程序中获得了代码。
代码是
double x = DBL_MAX;
在静态库x中的代码中分配了不正确的值~1.444E-125。在主app中的代码中,x被赋予了正确的值~1.79E + 308。
我的第一个想法是库代码是#including正确定义值的东西,但是我在其任何源或头文件中都找不到任何这样的定义。
我的另一个想法是std:_max_dble的初始化可能存在一些问题,它在DBL_MAX的定义中使用。
为了重现这个问题,我使用此源创建了一个C ++ Builder静态库(在Windows 7上):
#include "Unit1.h"
#include <float.h>
double TestDblMax()
{
double x(DBL_MAX);
return x;
}
将库链接到VCL表单应用程序,并从表单构造函数中调用它,作为该构造函数中的第一个语句。它给出了结果~1.444E-125。
答案 0 :(得分:1)
发现此旧帖子为“未答复”。我使用C ++ Builder 10.4 Sydney做了一些测试。
如果我使用C ++经典编译器-则使用静态库和VCL应用程序,可以获得与DBL_MAX〜1.449E-125相同的输出。
当我使用Win32测试(并关闭编译器选项“使用'经典的” Borland编译器)以使用基于Clang的编译器时,我得到了正确的DBL_MAX〜1.79E + 308结果。 Win64编译器,并为DBL_MAX获得正确的结果。
将不得不问C ++编译器团队是否还记得经典编译器和DBL_MAX的问题。