私は、必要なときに些細な変数を定義する習慣を身につけようとしてきました。私はこのようなコードを書くことに注意してきました:
while (n < 10000) {
int x = foo();
[...]
}
x
ループ内にのみ存在する標準が完全に明確であることは知っていますが、これは技術的には、反復ごとに整数がスタックに割り当てられ、割り当てが解除されることを意味しますか?最適化コンパイラがこれを行う可能性は低いと思いますが、それは保証されていますか?
たとえば、次のように書く方がよいでしょうか。
int x;
while (n < 10000) {
x = foo();
[...]
}
私はこのコードを具体的に意味するのではなく、このようなあらゆる種類のループを意味します。
このように異なる単純なループについてgcc4.7.2で簡単なテストを行い、同じアセンブリが生成されましたが、私の質問は、標準によれば、これら2つは本当に同一ですか?