这些浮点属性宏是 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_RADIXFLT_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 以用于编译主程序。