我用这种方式声明了一个变量:
int i = 0;
Run Code Online (Sandbox Code Playgroud)
我收到警告:
ISO C90禁止混合声明和代码
我该如何解决?
Joh*_*ski 106
我认为你应该将变量声明移到块的顶部.即
{
foo();
int i = 0;
bar();
}
Run Code Online (Sandbox Code Playgroud)
至
{
int i = 0;
foo();
bar();
}
Run Code Online (Sandbox Code Playgroud)
Joh*_*ode 33
直到C99标准,所有声明都必须在块中的任何语句之前:
void foo()
{
int i, j;
double k;
char *c;
// code
if (c)
{
int m, n;
// more code
}
// etc.
}
Run Code Online (Sandbox Code Playgroud)
C99允许混合声明和语句(如C++).许多编译仍然默认为C89,和一些编译器(如微软)不支持C99 可言.
因此,您需要执行以下操作:
确定您的编译器是否支持C99或更高版本; 如果是这样,配置它,以便它编译C99而不是C89;
如果你的编译器不支持C99或更高版本,你要么需要找到一个不同的编译器不支持它,或者重写代码,使所有声明的块内的所有语句之前.
Jen*_*edt 11
只需使用编译器(或为其提供所需的参数),以便编译更新版本的C标准,C99或C11.例如,对于GCC系列的编译器来说-std=c99.
小智 6
确保变量位于块的顶部,如果您使用 编译它-ansi-pedantic,请确保它看起来像这样:
function() {
int i;
i = 0;
someCode();
}
Run Code Online (Sandbox Code Playgroud)