C语句中for语句中变量声明的区别

时间:2016-02-11 07:19:30

标签: c for-loop

让我们假设它不仅在视觉工作室中,而且在C99,C11等中。

在for语句中有两种不同的方式来声明变量“i”。

1) 
int i;
for(i = 0 ; i < index ; ++i) 

2)
for(int i = 0 ; i < index ; ++i)

两者都一样。但我认为它们之间会有一些差别。 你对此有什么想法吗? 如果是,请告诉我。

我只是想知道你的意见,以及它的运作方式。

对不起。对于答案,我知道“我”的范围是不同的。

系统(我的意思是内存等)或编译器的工作方式有何不同,或者汇编的代码是不同的或类似的东西。

5 个答案:

答案 0 :(得分:3)

  

我只是想知道你的意见,以及它的运作方式。

在第一种情况下,i的范围更大。

同样,某些C标准版本允许您仅在函数开头声明变量,因此在第二种情况下声明无效。

否则没有太大区别。

答案 1 :(得分:2)

唯一的区别是,在第一种情况下,变量ifor范围之外,因此您可以稍后使用它。效率方面没有差异。

如果您只使用i一次,那么第二种情况肯定更好:

for(int i = 0 ; i < index ; ++i)

如果你有使用索引i的循环,那么在所有循环之外声明它可能是有意义的。

但一般来说,规则是限制变量的范围 - 因此第二种情况更好。限制变量的范围通常更安全。

值得注意的是,第二种情况语法仅适用于C99或更新的C11(不适用于旧的C89)。因此,如果在循环内声明变量,一些编译器会抱怨。例如,gcc需要显式标记-std=c99才能允许该语法。

答案 2 :(得分:1)

i的范围和生命周期不同。

在第二个例子中,它就在循环体内部。首先,它超越了它。

除此之外,他们是平等的。

答案 3 :(得分:1)

在for循环初始化中声明一个新变量是 C99 扩展名。

C89 要求在块的开头声明变量 从语义上讲,在循环的初始化部分中声明变量会限制变量&#39;范围到循环体。

通常需要限制范围,以避免在执行for循环体之后滥用变量。例如,如果您正在进行简单的迭代,则可能不希望索引在for循环之后存在。

没有正确的答案可供使用。问题变成了你想要的范围,以及你打算支持哪些编译器/语言版本。

答案 4 :(得分:-2)

在C99中,正确的方法是否1)。它要求在使用前声明变量。看起来您的编译器支持多种标准,因此它看起来对您使用的构造是透明的,并且它们都会导致相同的行为。在这种情况下,我个人的偏好是2)因为它减少了变量i的范围,也防止了单位化的价值使用(风险较小)。