如何告诉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样式变量声明。 更多细节可以在:
我使用默认的Visual Studio 2010项目,使用C文件和/TP
开关进行了相同的测试,并获得了预编译的头文件错误。 可以通过将stdafx.cpp
重命名为stdafx.c
或禁用整个项目或特定C文件的预编译stdafx.c
删除它。
我没有发现任何其他问题。 但是,我认为这有效地将C语言转换为C ++,这不是你的意图。 但是,C允许在每个{}
块的开头定义一个变量。