声明差异?

在使用循环之前声明变量和在循环中定义变量时有什么区别。

我在谈论这种情况

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通常是无意的。