浏览其他(非常好的)答案,有一点我没有看到。(如果确实成功了,我会错过并道歉。)
我将给你两个看似语义相同的代码片段。
片段#1:
for (int a = 0; a < arr.length; a++) {
/* do some work here */
}
片段#2:
int b = 0;
while (b < arr.length) {
// do work
b++;
}
他们看起来好像在做同样的事情,对吧?现在让我在每个片段中添加一行,让我们看看会发生什么:
片段#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);
因此,当我编译一个嵌入了这四个片段的垃圾文件(加上一些胶水以使 arr.length 有意义)时,我收到以下错误:
$ clang junk.c
junk.c:20:17: error: use of undeclared identifier 'c'
printf("%d\n", c);
^
1 diagnostic generated.
事实证明,使用for
循环允许您为虚拟计数器变量等提供更多局部性。这为您在重用变量名称时提供了更大的余地而不会发生冲突(尽管以增加潜在阴影为代价)。