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

Nai*_*ree 5 gcc

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

参考:这是Ubuntu 论坛上的一个帖子,它也提出了同样的问题(但没有得到解决)。

mur*_*uru 5

__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)