ISO C90禁止在C中使用混合声明和代码

我以这种方式声明了一个variables:

int i = 0; 

我得到警告:

ISO C90禁止混合声明和代码

我该如何解决?

我想你应该把variables声明移到块的顶部。 即

 { foo(); int i = 0; bar(); } 

 { int i = 0; foo(); bar(); } 

直到C99标准,所有的声明必须在块中的任何声明之前:

 void foo() { int i, j; double k; char *c; // code if (c) { int m, n; // more code } // etc. } 

C99允许混合声明和语句(如C ++)。 许多编译器仍然默认为C89,一些编译器(如微软)根本不支持C99。

所以,您需要执行以下操作:

  1. 确定您的编译器是否支持C99或更高版本; 如果是这样,configuration它,以便编译C99而不是C89;

  2. 如果您的编译器不支持C99或更高版本,则需要find支持该编译器的其他编译器,或者重写代码,以使所有声明都位于该块内的任何语句之前。

只要使用一个编译器(或者提供它所需的参数),就可以编译C标准C99或C11的更新版本。 例如,对于GCC系列编译器来说,这将是-std=c99

确保variables位于块的顶部,如果使用-ansi-pedantic进行编译,请确保它看起来像这样:

 function() { int i; i = 0; someCode(); } 

为了诊断真正触发错误的原因,我首先尝试删除= 0

  • 如果错误被触发,那么声明最有可能在代码之后。

  • 如果没有错误,那么它可能与C标准强制执行/编译标志或其他事情有关。

无论如何,在当前范围的开始处声明variables。 然后你可以单独初始化它。 事实上,如果这个variables值得自己的范围 – 在{}中定义它的定义。

如果行动计划能够澄清情况,那么就会有更直接的回应。