このプレゼンテーションのスライド 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