如何在C99模式下编译C项目?

编译C代码时收到以下错误消息:

error: 'for' loop initial declarations are only allowed in C99 mode note: use option -std=c99 or -std=gnu99 to compile your code 

这是什么意思?

怎么解决?

你这样做了:

 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添加到命令行以启用C99function[1]。

但是你总是被允许写一个复合语句( “块” ,IOW,但标准从不使用这个词!)代替单个语句。

 #include 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默认允许的其他一些很酷的东西,比如结构和联合中的匿名结构和联合。

  1. -std=gnu99可能会启用“所有好东西”,但我提醒你要避免这样做。 如果您(或其他人)希望移植代码,将会带来不必要的困难。 我可能有我的宠物项目的Windows版本,由某人免费移植,如果我没有这样做的话。 它与你联系gcc。 你不想被束缚。 这是标准的全部血腥点。

其他答案为您提供了解决GCC默认模式的方法。 如果您想使用C99(我一般建议使用),那么您必须添加该编译器标志:

 gcc -std=c99 foo.c -o foo 

或者,如果您使用的是标准makefile,请将其添加到CFLAGS变量中。

这意味着你不能在for语句中声明变量。

你应该做:

 int i ; for( i = 0 ; i < len ; i++ ) 

你可能在做什么

 for( int i = 0 ; i < len ; i++ )