我目前正在写一个C(不是C++).似乎Microsoft的C编译器要求在函数之上声明所有变量.
例如,以下代码不会通过编译:
int foo(int x) {
assert(x != 0);
int y = 2 * x;
return y;
}
Run Code Online (Sandbox Code Playgroud)
编译器在第三行报告错误,说
error C2143: syntax error : missing ';' before 'type'
Run Code Online (Sandbox Code Playgroud)
如果代码更改为如下所示,它将通过编译:
int foo(int x) {
int y;
assert(x != 0);
y = 2 * x;
return y;
}
Run Code Online (Sandbox Code Playgroud)
如果我将源文件名更改.c为.cpp,则编译也将通过.
我怀疑有一个选项可以关闭编译器的严格性,但我还没有找到它.任何人都可以帮忙吗?
提前致谢.
我正在使用Visual Studio 2008 SP1附带的cl.exe.
添加:
谢谢大家回答!看来我必须使用微软的cl.exe生活在C89中.
dwc*_*dwc 34
它看起来像是使用C89标准,它要求在任何代码之前声明所有变量.您可以使用文字等初始化它们,但不能混合代码和变量.
应该有一个编译器标志来在某处启用C99,它将为您提供您习惯的行为.
编辑:快速谷歌搜索看起来没有用于启用C99.你可能不得不忍受C89(这不是那么糟糕)或找到一个更好的C编译器(这会更好).