在C中退出循环后使用'for'循环迭代器

问题描述 投票:10回答:5

[多年以来,我养成了在循环退出后不使用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)?

c for-loop c99
5个回答
11
投票

C89C99C11中没有任何错误可以访问for语句之后的迭代变量。

 int i;

 for (i = 0; i < 10; i++) {
     /* Some code */
 }

 printf("%d\n", i);  // No magic, the value is 10

从C99开始,您还可以将声明用作for语句的第一子句,在这种情况下,当然不能在for语句之后使用声明的变量。]​​>


4
投票

不同的语言有不同的规则。在Pascal中,允许编译器优化在最终增量之后存储循环索引的过程,因此它might


2
投票

[在很多情况下,for循环不用于其他用途但是


0
投票

即使for循环的控制变量的值定义明确,由于处理该变量的作用域的方式,尤其是尤其是您可能被告知避免在[for]循环后使用for循环的控制变量。因为对C ++历史的处理已经发生了变化(我知道这个问题被标记为“ C”,但是我认为避免在循环之后使用for循环控制变量的理由可能源于此C ++历史)。


0
投票

虽然我可能不知道你的习惯如何发展,但我可以告诉你我的习惯也是如此。这是通过看到这样的代码:

© www.soinside.com 2019 - 2024. All rights reserved.