如何";模拟;VisualStudio中用于变量声明的C99

如何";模拟;VisualStudio中用于变量声明的C99,c,visual-studio-2012,c99,c89,C,Visual Studio 2012,C99,C89,我正在使用Visual Studio 2012开发简单的Win32 C程序。我知道VS编译器只支持C89,但我想知道是否有办法覆盖这个限制 特别是,我希望在代码中的任何地方声明变量,而不是仅在作用域块的开头(如C89所要求的) 提前感谢。 < p>使用C++编译器构建应用程序。这是最简单的方法。您仍然可以编写C代码,只需将文件命名为*.cpp我看到的选项: 坚持使用MSVC并切换到C++ 坚持使用MSVC并使用将C99转换为C90(,)的预编译器 切换到支持C语言最新版本的工具链(Intel、

我正在使用Visual Studio 2012开发简单的Win32 C程序。我知道VS编译器只支持C89,但我想知道是否有办法覆盖这个限制

特别是,我希望在代码中的任何地方声明变量,而不是仅在作用域块的开头(如C89所要求的)


提前感谢。

< p>使用C++编译器构建应用程序。这是最简单的方法。您仍然可以编写C代码,只需将文件命名为*.cpp

我看到的选项:

  • 坚持使用MSVC并切换到C++
  • 坚持使用MSVC并使用将C99转换为C90(,)的预编译器
  • 切换到支持C语言最新版本的工具链(Intel、MinGW、Clang、Pelles-C等)

这似乎是一条过时的线索,但在我搜索同一个问题时首先登陆这里,我想我应该发布更新:


您对MSVC编译器处于C模式有多在意?如果你将它设置为C++模式,你仍然可以编写C,你可以使用C99风格变量初始化。通常我创建一个简单的“VisualC++空项目”,然后我将一个.c源文件添加到它。你是说我应该简单地添加.cp文件而不是.c. @ BeNJ,在C++中编译C程序是个坏主意,有很多细微的差别:结构实现、隐式指针转换(例如,从MALOC返回值)、不同的布尔实现、不同的空实现等等。“我正在使用Visual Studio 2012开发简单的Win32 C程序“。简单到没有GUI,或者只是原始的Windows API?在这种情况下,最好的解决方案可能是使用VisualStudio作为IDE,并使用像MIWW这样的C编译器编译程序。Visual Studio 2013现在支持混合声明和代码。我之所以把它作为一个注释而不是作为回答的原因是因为C编译器与C++编译器不一样。当然,编写C的方法是不可能编译成C++的,反之亦然。我很想看到一些C++代码,这些代码在C++ +jj溶胶中没有编译。char*foo=malloc(1);vs.char*foo=重新解释cast(malloc(1))@Benj:另一个例子是C++中缺少对指定初始化器的支持,这有时不能在没有C代码和> IFIFF、CPLUS PLUS < /C> >(例如,静态初始化工会)的情况下进行,除了C和C++之间的不兼容,使用C++编译器进行C开发的问题是,你失去了所有有用的编译器诊断。除非你有很好的C知识和C和C++之间的细微差别,否则你可能会遇到无效的C代码。一个C++编译器可能会用于获得一些现有的C代码运行(有一些改变),但是用它来开发新代码是个坏主意。我不能切换到C++,所以使用MIW作为编译器和VS作为IDE似乎是一个很好的解决方案。我会试试这个。请注意,从MSVC2013开始,这个答案不再正确。