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。
所以,您需要执行以下操作:
-
确定您的编译器是否支持C99或更高版本; 如果是这样,configuration它,以便编译C99而不是C89;
-
如果您的编译器不支持C99或更高版本,则需要find支持该编译器的其他编译器,或者重写代码,以使所有声明都位于该块内的任何语句之前。
只要使用一个编译器(或者提供它所需的参数),就可以编译C标准C99或C11的更新版本。 例如,对于GCC系列编译器来说,这将是-std=c99
。
确保variables位于块的顶部,如果使用-ansi-pedantic
进行编译,请确保它看起来像这样:
function() { int i; i = 0; someCode(); }
为了诊断真正触发错误的原因,我首先尝试删除= 0
-
如果错误被触发,那么声明最有可能在代码之后。
-
如果没有错误,那么它可能与C标准强制执行/编译标志或其他事情有关。
无论如何,在当前范围的开始处声明variables。 然后你可以单独初始化它。 事实上,如果这个variables值得自己的范围 – 在{}中定义它的定义。
如果行动计划能够澄清情况,那么就会有更直接的回应。