这些浮点属性宏是 GCC 特有的吗?
Are these float attributes macros specific to GCC?
我正在使用 GCC,我的编译器定义了这些宏:__FLT_RADIX__
、__FLT_MANT_DIG__
、__FLT_MAX_EXP__
、__FLT_HAS_INFINITY__
、__FLT_HAS_QUIET_NAN__
、__FLT_HAS_DENORM__
, ... 它们是 GCC 特有的还是 C++ 标准中的?我的意思是无论它们是否被定义,我都知道它们的值是特定于实现的。如果它们不在标准中,我在哪里可以找到所有编译器的等效项?
Are they ... in the C++ standard ?
没有
Are they specific to GCC
它们不在 GCC 文档中,因此也不保证它们在 GCC(的未来版本)中。它们供内部使用(可能用于标准宏和 std::numeric_limits
的可移植实现)。
where can I find their equivalent for all compilers ?
C 标准库中的大多数都有相应的标准宏。只需删除开头和结尾的下划线;例如 FLT_RADIX
。 FLT_HAS_SUBNORM
是一个例外,如您所见,它的命名方式不同。请参阅标准以获取完整的宏列表。
__FLT_HAS_QUIET_NAN__
或 __FLT_HAS_INFINITY__
没有标准宏。但是信息(包括其他信息)在 std::numeric_limits
模板中。
I need to use those values in the preprocessor
It there a ways of using std::numiric_limits constants in the preprocessor
您可以使用元编程。编写一个程序,生成一个带有自定义宏定义的 header 文件。像
std::cout << "#define MY_CUSTOM_FLT_HAS_QUIET_NAN "
<< std::numeric_limits<float>::has_quiet_NaN();
然后编译并 运行 目标系统上的元程序以生成 header 以用于编译主程序。
我正在使用 GCC,我的编译器定义了这些宏:__FLT_RADIX__
、__FLT_MANT_DIG__
、__FLT_MAX_EXP__
、__FLT_HAS_INFINITY__
、__FLT_HAS_QUIET_NAN__
、__FLT_HAS_DENORM__
, ... 它们是 GCC 特有的还是 C++ 标准中的?我的意思是无论它们是否被定义,我都知道它们的值是特定于实现的。如果它们不在标准中,我在哪里可以找到所有编译器的等效项?
Are they ... in the C++ standard ?
没有
Are they specific to GCC
它们不在 GCC 文档中,因此也不保证它们在 GCC(的未来版本)中。它们供内部使用(可能用于标准宏和 std::numeric_limits
的可移植实现)。
where can I find their equivalent for all compilers ?
C 标准库中的大多数都有相应的标准宏。只需删除开头和结尾的下划线;例如 FLT_RADIX
。 FLT_HAS_SUBNORM
是一个例外,如您所见,它的命名方式不同。请参阅标准以获取完整的宏列表。
__FLT_HAS_QUIET_NAN__
或 __FLT_HAS_INFINITY__
没有标准宏。但是信息(包括其他信息)在 std::numeric_limits
模板中。
I need to use those values in the preprocessor
It there a ways of using std::numiric_limits constants in the preprocessor
您可以使用元编程。编写一个程序,生成一个带有自定义宏定义的 header 文件。像
std::cout << "#define MY_CUSTOM_FLT_HAS_QUIET_NAN "
<< std::numeric_limits<float>::has_quiet_NaN();
然后编译并 运行 目标系统上的元程序以生成 header 以用于编译主程序。