気になったのでちょっと調べてみた
int main() { int p = 1; if (p > 0) { int p = printf("%d\n", p); } }
を実行したら0が表示されたとのこと。
気になったので手元で実行したりしてみた。手元(VM上のUbuntu, gcc-4.2.3)では 134513641 と表示された。
アセンブリに直したりして考えて見たところ
int main() { int p = 1; if (p > 0) { int p; p = printf("%d\n", p); } }
と同じだってことに気づく。
あー初期化されてない変数を出力してたのか。だったら0と表示されてもおかしくないなー。