[多年以来,我养成了在循环退出后不使用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
现在,如果我可以依靠i的值,显然可以删除result
变量。我认为由于编译器的优化,您不能依赖循环迭代器的值。我只是想起幻像教学吗?还是这是标准(特别是关于GNU C)?
不同的语言有不同的规则。在Pascal中,允许编译器优化在最终增量之后存储循环索引的过程,因此它might
[在很多情况下,for循环不用于其他用途但是
即使for
循环的控制变量的值定义明确,由于处理该变量的作用域的方式,尤其是尤其是您可能被告知避免在[for]循环后使用for
循环的控制变量。因为对C ++历史的处理已经发生了变化(我知道这个问题被标记为“ C”,但是我认为避免在循环之后使用for循环控制变量的理由可能源于此C ++历史)。
虽然我可能不知道你的习惯如何发展,但我可以告诉你我的习惯也是如此。这是通过看到这样的代码: