关于C语言中 limit.h 的一些疑问_小白勿喷

INT_MAX    定义一个整型的最大值。

如果我代码这么写  

#define INT_MAX +500;  //我想定义的是最大的整数是+500.

int main(void)

{

int a = 501;

printf("%d",a);

return 0;

}

我的理解是,501已经超出了 limit定义的 INT_MAX的最大值500,此处应该无法输出或者报错才对,但是为什么能正常的输出501.求解

limit.h里的数据,从设计上而言,是给人看的,不是给机器看的。实际上的整数最大合法值是硬件和编译器共同决定的(硬件实现是决定性因素),你再怎么define也不可能通过软件改变硬件实现啊。INT_MAX仅仅是为了方便程序员,由库的实现者写的一个值,它并不真正决定int最大值。就跟磁感线一样,它只是方便研究描述磁现象而人为规定的一种东西,你把课本上的磁感线改成别的样子,并不能影响现实中磁场的实际形态。这里的INT_MAX和int最大值的关系就类似于书上的磁感线和实际磁场的关系。

感谢,简单易懂,谢谢了!

#define 只是一个预编译指令。

如#define INT_MAX 500 编译器会在编译之前把程序中所有的INT_MAX替换成500再编译

你写的代码中没有用到INT_MAX所以预编译时也没有做任何替换和没有定义差不多。明白意思了吗?

要实现你的思路可以这样写代码:

#define INT_MAX 500;  //我想定义的是最大的整数是500.

int main(void)

{

int a = 501;

if(a > INT_MAX)

{

printf("Error:The max int is %d\n", INT_MAX);

}else{

printf("%d",a);

}

return 0;

}