limits.h中LONG_MAX的循环定义

时间:2014-01-24 13:52:16

标签: c

GNU C编译器的limits.h头中的以下定义,

#define LONG_MAX    2147483647L

使用的L后缀表示应将数字2147483647视为长整数文字。但该语句实际上是长整数的定义,所以不使用L作为后缀使定义循环,因此不合逻辑?。

我相信LONG_MAX通过指定long int的最大范围来定义long int。简而言之,long int指的是LONG_MAX,LONG_MAX中的L指的是long int。

4 个答案:

答案 0 :(得分:5)

这不是类型的定义,这是一个文字常量。

答案 1 :(得分:4)

预处理器使用

#define进行基本文本替换,因此字符串2147483647L只需在LONG_MAX或其他任何编译工作之前替换字符串long。 / p>

答案 2 :(得分:3)

您引用的行未定义long int是什么。它将LONG_MAX宏的值定义为值为2147483647的常量,并指定它为long int类型。

在预处理器执行文本替换之后,这将替换LONG_MAX的任何实例。

答案 3 :(得分:3)

编译器知道long int是什么,因为它是内置在编译器中的,而不是因为limits.h中的内容。

limits.h使用编译器向程序提供信息,而不是编译器。