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