他の(非常に良い)答えを一瞥して、私が作られているのを見なかった点があります。(もしそれが作られたのなら、私はそれを見逃して謝罪しました。)
一見意味的に同一のコードの2つのスニペットを提供します。
スニペット#1:
for (int a = 0; a < arr.length; a++) {
/* do some work here */
}
スニペット#2:
int b = 0;
while (b < arr.length) {
// do work
b++;
}
彼らは同じことをしているように見えますよね?次に、各スニペットに1行追加して、何が起こるかを見てみましょう。
スニペット#3:
for (int c = 0; c < arr.length; c++) {
/* do some work here */
}
printf("%d\n", c);
スニペット#4:
int d = 0;
while (d < arr.length) {
// do work
d++;
}
printf("%d\n", d);
したがって、これらの4つのスニペットが埋め込まれたジャンクファイルをコンパイルすると(さらに、arr.lengthが何かを意味するように接着剤を使用すると)、次のエラーが発生します。
$ clang junk.c
junk.c:20:17: error: use of undeclared identifier 'c'
printf("%d\n", c);
^
1 diagnostic generated.
ループを使用するfor
と、ダミーのカウンター変数などにより多くの局所性を提供できることがわかります。これにより、衝突の可能性なしに変数名を再利用する際の余裕が広がります(ただし、シャドウイングの可能性が高くなります)。