在本演示文稿的幻灯片 137-140 中,提到 bar() 甚至可能 foo() 被编译为该示例程序的内联函数,导致在正常构建中打印输出为 42,即使它在技术上应该是垃圾. 您是否碰巧知道优化器启动时为什么输出垃圾如预期?
我已经包含了源代码
#include <stdio.h>
void foo(void)
{
int a;
printf("%d\n", a);
}
void bar(void)
{
int a = 42;
}
int main(void)
{
bar();
foo();
return 0;
}
和命令提示符打印输出以供参考。
$ cc foo.c && ./a.out
42
$ cc -O foo.c && ./a.out
1606415608