我正在使用gccUbuntu 14.04(64 位)下的编译器学习 C 编程。作为一种实践,我试图找到多个 C 数据类型的大小限制的定义。
我很容易地定位limits.h在/usr/include,发现常数等的明确定义
# define INT_MAX 2147483647
Run Code Online (Sandbox Code Playgroud)
在里面。
我还发现它float.h位于/usr/lib/gcc/x86_64-linux-gnu/4.8/include. 但是,我没有找到诸如FLT_MAX. 我得到的是
#define FLT_MAX __FLT_MAX__
Run Code Online (Sandbox Code Playgroud)
但是 的定义在__FLT_MAX__哪里?或者C预处理器从哪里得到它的值?
__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
Run Code Online (Sandbox Code Playgroud)