C:for循环int初始声明
有人可以详细解释下面的gcc错误吗?
$ gcc -o Ctutorial/temptable.out temptable.c temptable.c: In function 'main': temptable.c:5: error: 'for' loop initial declaration used outside C99 mode
temptable.c:
... /* print Fahrenheit-Celsius Table */ main() { for(int i = 0; i <= 300; i += 20) { printf("F=%d C=%d\n",i, (i-32) / 9); } }
PS:我依稀记得, int i
应该在for
循环之前声明。 我应该说,我正在寻找一个给出C标准历史背景的答案。
for (int i = 0; ...)
是C99中引入的语法。 为了使用它,您必须通过将-std=c99
(或稍后的标准)传递给GCC来启用C99模式。 C89版本是:
int i; for (i = 0; ...)
编辑
历史上,C语言总是强迫程序员在块的开头声明所有的variables。 所以像这样:
{ printf("%d", 42); int c = 43; /* <--- compile time error */
必须改写为:
{ int c = 43; printf("%d", 42);
一个块被定义为:
block := '{' declarations statements '}'
C99,C ++,C#和Java允许在块中的任何位置声明variables。
真正的原因(猜测)是在分析C源代码时尽快分配内部结构(如计算堆栈大小),而不需要进行另一次编译。
在C99之前,您必须在块的开始处定义局部variables。 C99导入了可以混合局部variables定义和指令的C ++特性,并且可以在for
和while
控制expression式中定义variables。