1

这两个for循环有什么区别?我被告知不要在我的代码中使用第二个示例。我对此感到困惑,因为这在其他语言中不是问题。

那么这有什么区别/问题还是只是一种偏好?

//ex1
int i;
for(i = 0; i<whatever; i++){...code}

//ex2
for(int i=0; i<whatever;i++){...code}
4

5 回答 5

17

不同之处在于i.

在第一个示例中,i在循环之后在 AND 内具有范围。

在第二个示例中,i在循环内具有范围。

第二个例子是 C99 及更高版本。

尽可能使用第二个示例,i循环后需要使用第一个示例,或者当您的编译器不支持 C99 时。

于 2013-11-03T14:45:23.303 回答
3

第二个受 C99 支持,但不受 C89 支持。区别在于范围和初始化点。范围由括号'确定。要理解我的意思:

int main()
{
    int i=0;//-------------------------------------------------
    {//                                                       |
        int i=1;//------------------------------------------  |
        {//                                                |  |
            for(int i=2; i < 1; i++)//-----------------    |  |
            {//Declaring in loop works only in C99    |                                       |    |  |
                 {//-----------------                 |    |  |
                      int i=3;//    |                 |    |  |
                 }//-----------------                 |    |  |
            }//----------------------------------------    |  | 
        }//                                                |  |   
    }//-----------------------------------------------------  |
    //---------------------------------------------------------
}

虚线显示了i块中不同 ' 的范围。

于 2013-11-03T14:45:49.123 回答
0

i 变量的范围不同。

在第二种情况下,变量范围是 for 循环本身。在第一种情况下, i 变量属于外部范围。

于 2013-11-03T14:47:57.917 回答
0

经验法则:应该在尽可能严格的范围内声明变量。

为什么?
考虑一个错字,您;在 for 循环之后插入一个:

int i; 
for(i = 0; i<whatever; i++);
{  }

如果您在循环范围之外声明,您将不会收到错误i,这比前一种情况要好。

for(int i = 0; i<whatever; i++);
{  }

你会得到一个错误,因为i{ }. 因此,最好尽可能在最严格的范围内声明变量。

于 2013-11-03T14:48:02.103 回答
0

IIRC,第二个示例在 C89 和/或 C90 中无效,但在 C99 及更高版本中可用。除此之外的任何其他差异都i只能在第二个示例的循环中访问,其中第一个示例i位于外部范围内。

我总是使用第一个示例中的表格,因为程序变得更加一致和抗错,而无需我想太多。

于 2013-11-03T14:51:21.627 回答