编译C代码时出现以下错误消息:
error: 'for' loop initial declarations are only allowed in C99 mode
note: use option -std=c99 or -std=gnu99 to compile your code
这是什么意思?
如何解决?
答案 0 :(得分:31)
你做到了:
for (int i=0;i<10;i++) {
你需要改变它:
int i;
for (i=0;i<10;i++) {
或者,正如错误所说,
从Ryan Fox的回答中复制使用选项-std = c99或-std = gnu99来编译代码。
更新 :
gcc -std=c99 foo.c -o foo
或者,如果您使用的是标准makefile,请将其添加到CFLAGS变量中。
答案 1 :(得分:6)
如果你想混合语句和变量声明,你仍然需要C99。正如其他答案和错误消息本身所说,在编译时将-std=c99
添加到命令行以启用C99功能[1]。
但是你总是被允许写一个复合语句(“block”,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&amp; R,C90(又名C89,它是同一件事),和 C99中是合法的。
启用C99模式会获得大量cool stuff,但它也会禁用gcc默认允许的其他一些很酷的东西,比如结构和联合中的匿名结构和联合。
-std=gnu99
可能会启用“所有好东西”,但我提醒您不要这样做。如果您(或其他人)希望移植代码,将会产生不必要的困难。我可能有一个我的宠物项目的Windows版本,由某人免费移植,如果我没有这样做的话。它与你联系gcc。你不想被束缚。这是标准的全部血腥点。答案 2 :(得分:4)
其他答案可以帮助您解决GCC的默认模式。如果您想使用C99(我一般建议使用),那么您必须添加该编译器标志:
gcc -std=c99 foo.c -o foo
或者,如果您使用的是标准makefile,请将其添加到CFLAGS变量中。
答案 3 :(得分:2)
这意味着您无法在for
语句中声明变量。
你应该这样做:
int i ;
for( i = 0 ; i < len ; i++ )
你可能在做什么
for( int i = 0 ; i < len ; i++ )