Ubuntu 上 `__FLT_MAX__` 常量在哪里定义?

Ubuntu 上 `__FLT_MAX__` 常量在哪里定义?

我正在使用 Ubuntu 14.04 (64位) 下的编译器学习 C 编程gcc。作为练习,我试图找到多种 C 数据类型的大小限制的定义。

我很容易就找到了limits.h/usr/include并找到了常量的明确定义,例如

#  define INT_MAX   2147483647

在里面。

我还发现float.h位于/usr/lib/gcc/x86_64-linux-gnu/4.8/include。但是,我没有找到明确的定义,比如说FLT_MAX。我得到的是

#define FLT_MAX     __FLT_MAX__

但是 的定义在哪里__FLT_MAX__?或者 C 预处理器从哪里获取它的值?

参考: 这里有一个线Ubuntu 论坛也问了同样的问题(但没有解决)。

答案1

__FLT_MAX__预定义宏. 您可能需要查看 GCC 源代码才能看到在哪里它有定义,但是很容易知道它的定义是什么:

C 预处理器通常会预定义几个宏,用于指示正​​在使用的系统和机器类型。它们在 GCC 支持的每个目标上显然都不同。本手册适用于所有系统和机器,因此无法告诉您它们的名称,但您可以使用 cpp -dM 来查看所有宏。

所以:

$ cpp -dM <<<'' | grep 'FLT_MAX'
#define __FLT_MAX_10_EXP__ 38
#define __FLT_MAX_EXP__ 128
#define __FLT_MAX__ 3.40282346638528859812e+38F

相关内容