为什么此代码不产生编译时错误? 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/

10-12 07:36