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 ++特性,并且可以在forwhile控制expression式中定义variables。