我正在使用 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 预处理器从哪里获取它的值?
答案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