如何告诉Visual Studio / Microsoft的C编译器在第一个语句之后允许变量声明?

我有编译GNUARM编译器的代码,但Visual Studio 2010发出错误。 该问题涉及在C语言文件中的第一个语句之后声明变量:

main.c中

#include  #include  int main(void) { int i = 6; i = i + 1; printf("Value of i is: %d\n", i); int j = i * 10; // <-- This is what Visual Studio 2010 complains about. printf("Value of j is: %d\n", j); return EXIT_SUCCESS; } 

以下代码编译时没有错误:

 #include  #include  int main(void) { int i = 6; int j; // <-- Declaration is now here, valid according to K&R rules. i = i + 1; printf("Value of i is: %d\n", i); j = i * 10; // <-- Moved declaration of j to above. printf("Value of j is: %d\n", j); return EXIT_SUCCESS; } 

我正在使用默认设置来创建Win32控制台项目。 当我将“编译为”属性设置为“编译为C ++(/ TP)”时,我在某些Visual Studio头文件中出现编译错误。 (右键单击项目,选择“ 属性” →“ 配置属性” →“ C / C ++” →“ 高级” )。

如何告诉Visual Studio 2010在第一个语句之后允许变量声明,如C ++或当前的C语言标准?

你没有。 Visual C ++不支持C99。

您需要编译为C ++(并相应地更新您的代码)或遵循C89的规则。

(我不知道用/TP编译时会得到什么错误;如果我为EXIT_SUCCESS添加#include ,我可以用/TP成功编译你的例子;如果你提供更多细节,我或其他人可能是能够提供帮助。)

从Visual Studio 2013开始,Visual C ++编译器支持C99样式变量声明。 更多细节可以在:

http://blogs.msdn.com/b/vcblog/archive/2013/06/28/c-11-14-stl-features-fixes-and-breaking-changes-in-vs-2013.aspx

我使用默认的Visual Studio 2010项目,使用C文件和/TP开关进行了相同的测试,并获得了预编译的头文件错误。 可以通过将stdafx.cpp重命名为stdafx.c或禁用整个项目或特定C文件的预编译stdafx.c删除它。

我没有发现任何其他问题。 但是,我认为这有效地将C语言转换为C ++,这不是你的意图。 但是,C允许在每个{}块的开头定义一个变量。