有人可以详细说明以下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语言总是迫使程序员在块的开头声明所有变量.所以类似于:
{ printf("%d", 42); int c = 43; /* <--- compile time error */
必须改写为:
{ int c = 43; printf("%d", 42);
块定义为:
block := '{' declarations statements '}'
C99,C++,C#和Java允许在块中的任何位置声明变量.
真正的原因(猜测)是在解析C源时尽快分配内部结构(如计算堆栈大小),而不需要另外编译器传递.
在C99之前,您必须在块的开头定义局部变量.C99导入了C++特性,您可以将局部变量定义与指令混合,并且可以在for
和while
控制表达式中定义变量.