编译C代码时收到以下错误消息:
error: 'for' loop initial declarations are only allowed in C99 mode
note: use option -std=c99 or -std=gnu99 to compile your code
这是什么意思?
怎么解决?
Blo*_*ard 33
你做到了这个:
for (int i=0;i<10;i++) {
你需要改变它:
int i;
for (i=0;i<10;i++) {
或者,正如错误所说,
使用选项-std = c99或-std = gnu99来编译代码.
从Ryan Fox的答案复制的更新:
gcc -std=c99 foo.c -o foo
或者,如果您使用的是标准makefile,请将其添加到CFLAGS变量中.
如果要混合语句和变量声明,您仍然需要C99.正如其他答案和错误消息本身所说,-std=c99在编译时添加到命令行以启用C99功能[1].
但是你总是被允许写一个复合语句(一个"块",IOW,但标准从不使用这个词!)代替单个语句.
#include<stdio.h>
int main() {
    int i = 5;
    {   /* new block, new declarations. */
        int i;
        for (i=0;i<10;i++){
        }
    }
    printf("%d\n", i);  /* prints "5\n" */
}
这在K&R,C90(又名C89,它是同一件事)和 C99中是合法的.
启用C99模式可以获得很多很酷的东西,但它也会禁用gcc默认允许的其他一些很酷的东西,比如结构和联合中的匿名结构和联合.
-std=gnu99可能会启用"所有好东西",但我提醒你要避免这样做.如果您(或其他人)希望移植代码,将会带来不必要的困难.我可能有一个我的宠物项目的Windows版本,由某人免费移植,如果我没有这样做的话.它与你联系gcc.你不想被束缚.这是标准的全部血腥点.其他答案使您可以解决GCC的默认模式。如果要使用C99(我通常建议这样做),则必须添加该编译器标志:
gcc -std=c99 foo.c -o foo
或者,如果您使用的是标准Makefile,请将其添加到CFLAGS变量中。