C中此代码的输出是什么?

Ahm*_*med 1 c stack

我在第4页找到了这段代码.本书的第 127位作者说它打印了42.但是当我尝试这个时它打印出一些垃圾值.为什么会这样?

    #include <stdio.h>
    void foo()
    {
        int a ;
        printf("%d \n", a);
    }

    void bar()
    {
        int a = 42;
    }

    int main()
    {
        bar();
        foo();
        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

Yu *_*Hao 5

ain foo()未初始化,因此它是未定义的行为.

但是,在实践中,一些编译器实际上会输出42(特别是如果关闭优化).那是因为在调用之后bar(),该值42保留在堆栈中.在里面foo(),未初始化a得到它.同样,它是未定义的行为,所以任何事情都可能发生,只是不要这样做.