何年もの間、私はfor
ループ終了後にループ反復子の値を使用しないという習慣を身につけてきました。以前はコンパイラの警告が表示されていたので、これを実行したと断言することもできましたが、最近のコード レビューで異議を唱えられた後、間違いであることが証明されました。
たとえば、私はいつもこれを行っていました (注: 私たちのコード標準では、「break」キーワードの使用は禁止されています)。
int i, result;
bool done = false;
for (i=0; i<10 && !done; i++) {
if (some_condition) {
result = i;
done = true;
}
}
// Value of i may be undefined here
result
ここで、 i の値に頼ることができれば、明らかに変数を削除できます。コンパイラの最適化のため、ループ反復子の値に依存できないと思いました。幻の教えを思い出しただけですか?それともこれが標準ですか(特にGNU Cに関して)?