声明差异?
在使用循环之前声明变量和在循环中定义变量时有什么区别。
我在谈论这种情况
int i; for(i=0; i<100; i++);
和
for(int i=0; i<100; i++);
在第一种情况下,假设变量i
也将在循环之后使用,例如
int i; for(i=0; i<100; i++); printf( "i = %d\n", i );
然而,用以下方式编写会好得多
int i = 0; for( ; i<100; i++); printf( "i = %d\n", i );
在这种情况下,我们将获得有效的可读代码,而不需要打扰循环中的内容,例如
int i = 0; /* some loop used i */ printf( "i = %d\n", i );
即使变量不会在循环中或在某些其他代码中而不是循环中更改(分配)(通常每个代码都有变化的趋势),但我们将获得有效的结果。
在第二种情况下,假设变量i
将仅在循环内使用
for(int i=0; i<100; i++);
我们不需要它在循环之外的价值。 所以在这种情况下,变量的寿命受到循环体的限制。 在循环之外它将是隐形的而不是活着的。
在前一种情况下,您可以在for循环外部访问i
。 如果循环中有条件中断,这可能是有利的,例如:
int i = 0; for (i = 0; i < 100; i++) { if (someUnexpectedConditionHappens()) { break; } // do something } printf("The loop has been executed %d times", i);
这是“范围”。 在第二种情况下,您只能在for循环中使用该变量。 在第一种情况下 – 在整个包含块中。
在第一种情况下, i
可以在当前块内的循环外访问。 在C89中 ,您无法在循环中声明变量,因此您必须坚持使用此方法。
在第二种情况下, i
不能在循环外访问。 在循环中声明变量是C99function。
在循环之前执行此操作时,变量也可在循环外部使用。 而当你在里面做它时,它是一个只能在循环内部使用的局部变量。
此外,您可以在使用C99标准时在循环内声明变量。 但它不适用于例如C90。 所以要小心。
在第一种情况下, i
可以在for
循环之外访问。
在第二种情况下, i
的范围仅限于for
循环体。
可以说第二种情况可以提供更好的程序稳定性,因为在for
循环之外使用i
通常是无意的。