在C中声明变量 - 很多方面?

时间:2013-11-06 20:37:58

标签: c

我和朋友讨论在C语言中声明一些变量的正确方法,正是在for循环中。

他有一个我无法记住的编译器,我有Dev-C ++。

他确实:

for (int i = 0; i<10; i++)
// ... and it works

我做:

int i;
for (i = 0; i<10; i++)
// ... and it works

如果我这样做,Dev-C ++会给我一个错误。这是什么技术上正确的方法?我被教导按照我的方式去做,但现在我感到很困惑,因为他以其他方式做到这一点并且对他有效D:

4 个答案:

答案 0 :(得分:8)

在C99和C ++中支持在循环中声明变量,就像你的朋友一样。很可能你的朋友来自C ++背景,这种宣言风格是常态。像你一样在循环外声明循环变量在旧C中是正确的,例如C89,这是你的编译器显然支持的。

如果您可以访问C99编译器,那么选择哪种样式主要是首选项。经验丰富的C程序员不介意在循环体外声明变量,但在内部声明它们被认为稍微清晰,因为它将变量的范围限制在尽可能少的词法区域。当然,如果您计划在循环完成后使用它,那么在循环体外声明变量是必要的 - 例如,检查循环进展的程度。

答案 1 :(得分:1)

取决于您使用的C版本。 Ansi C(原版,Ritchie&amp; Kernighan)仅支持块开头的声明,而现代C(以及任何C ++版本)允许混合声明和声明。

{ 
   int a;
   printf ("Stuff);
   int b; /* not allowed */
}

答案 2 :(得分:0)

在for-loop标头内声明一个值会导致在c99之前的任何编译器中出错。如果使用c99标准或更新版本编译它,它将正常工作。

答案 3 :(得分:-2)

正式表示这两者之间的物理差异是表现。把定义放在括号之后,可能有更多机会作为仅寄存器变量。但另一方面,在编译器的分析机制的帮助下,还有许多其他因素可以决定优化结果的细节。所以最终结果可能没有什么不同甚至相反。   确实有一个不同的确定:如果你在'for'之后的括号内定义一个变量,那么该变量将不能在for循环的外部使用。