For-Loop计数器会停留吗?

时间:2010-12-01 11:38:15

标签: c loops iterator for-loop

简单问题。想象一下这在ANSI-C中:

int i;

for(i=0 ; i<5 ; i++){
   //Something...
}

printf("i is %d\n", i);

这输出“我是5”吗?

循环后保留ii的值是否未定义?

5 个答案:

答案 0 :(得分:14)

是。如果i在for循环之外声明,它将在循环退出后保持在范围内。它保留了循环退出时的任何值。

如果你在循环中声明我:

for (int i = 0 ; i < 5 ; i++)
{

}

然后在循环退出后我未定义。

答案 1 :(得分:1)

变量i是在循环范围之外定义的(这很好,或者在这种情况下你无法打印它)。

对于循环的每一个回合都是后期修改,结束条件是“当我大于或等于5时停止”。

因此,在这一点上我等于5真的很有意义。

块范围与C中的函数范围不完全相同。当您退出循环范围时,变量i不会神奇地“返回”它的先前值。

答案 2 :(得分:1)

循环后,

i的值为5。除非你做了像

这样的事情
i = 50000;

里面。

答案 3 :(得分:0)

在我读过的大多数编码标准中退出循环后,通常也建议不要使用“i”。特别是不要这样做:

for(i = 0; i < num_elements; i++)
{
    if(element[i].id == id)
    {
        /* Do something to element here. */
        break;
    }
}

if(i == num_elements)
{
    fprintf(stderr, "Failed to find element %d.", id);
    succeeded == false;
}

虽然这样可行但编码很差。它的可读性和可维护性低于其他选择。 E.g。

succeeded = false;

for(i = 0; i < num_elements; i++)
{
    if(element[i].id == id)
    {
        /* Do something to element here. */
        succeeded = true;
        break;
    }
}

if(false == succeeded)
{
    fprintf(stderr, "Failed to find element %d.", id);
}

答案 4 :(得分:0)

是的,变量仅在声明它们的块内有效。 这是一个例子:

#include <stdio.h>

void main(int argc, char *argv[])
{
    if(argc == 2) {
        int x;
        x = 7;
    }

    x = 1;
}

这是编译器:

gcc ex.c
ex.c: In function ‘main’:
ex.c:10: error: ‘x’ undeclared (first use in this function)
ex.c:10: error: (Each undeclared identifier is reported only once
ex.c:10: error: for each function it appears in.)