这两个for循环有什么区别?我被告知不要在我的代码中使用第二个示例。我对此感到困惑,因为这在其他语言中不是问题。
那么这有什么区别/问题还是只是一种偏好?
//ex1
int i;
for(i = 0; i<whatever; i++){...code}
//ex2
for(int i=0; i<whatever;i++){...code}
这两个for循环有什么区别?我被告知不要在我的代码中使用第二个示例。我对此感到困惑,因为这在其他语言中不是问题。
那么这有什么区别/问题还是只是一种偏好?
//ex1
int i;
for(i = 0; i<whatever; i++){...code}
//ex2
for(int i=0; i<whatever;i++){...code}
不同之处在于i
.
在第一个示例中,i
在循环之后在 AND 内具有范围。
在第二个示例中,i
在循环内具有范围。
第二个例子是 C99 及更高版本。
尽可能使用第二个示例,i
循环后需要使用第一个示例,或者当您的编译器不支持 C99 时。
第二个受 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
块中不同 ' 的范围。
i 变量的范围不同。
在第二种情况下,变量范围是 for 循环本身。在第一种情况下, i 变量属于外部范围。
经验法则:应该在尽可能严格的范围内声明变量。
为什么?
考虑一个错字,您;
在 for 循环之后插入一个:
int i;
for(i = 0; i<whatever; i++);
{ }
如果您在循环范围之外声明,您将不会收到错误i
,这比前一种情况要好。
但
for(int i = 0; i<whatever; i++);
{ }
你会得到一个错误,因为i
在{ }
. 因此,最好尽可能在最严格的范围内声明变量。
IIRC,第二个示例在 C89 和/或 C90 中无效,但在 C99 及更高版本中可用。除此之外的任何其他差异都i
只能在第二个示例的循环中访问,其中第一个示例i
位于外部范围内。
我总是使用第一个示例中的表格,因为程序变得更加一致和抗错,而无需我想太多。