为什么此代码不产生编译时错误? INT_MAX是一个宏,其中包含可以存储在int中的最大值,但是未声明minVal并在我打印它时产生值0。我正在使用c99进行编译。
#include <limits.h>
#include <stdio.h>
int main() {
int max = INT_MAX, minVal;
printf("Value of max: %d", max);
printf("Value of minVal: %d", minVal);
// Output
// 2147483647
// 0
return 0;
}
最佳答案
在您的程序中,minVal
被声明和定义,但从未初始化。
您的程序通过访问minVal
函数调用中未初始化的对象printf
来调用未定义的行为。
当已知程序会调用未定义的行为时,C不需要编译器的诊断或转换错误。允许编译器输出诊断或停止翻译(除其他外),但不是必须的。
关于c - 在C中使用INT_MAX宏和未初始化的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27339303/