在没有Microsoft扩展的情况下构建Visual C++

Pie*_*tro 6 c++ standards visual-c++

我正在尝试在Microsoft Visual C++ 2013中构建一个禁用所有非标准扩展的项目.

#ifdef _MSC_VER
#include <windows.h>
#endif
Run Code Online (Sandbox Code Playgroud)

在配置属性 - > C/C++ - >语言中,我将"禁用语言扩展"设置为是(/ Za).
但是,构建以前的代码我得到的错误如下:

C:\ Program Files(x86)\ Windows Kits\8.1\Include\um\winnt.h(11527):错误C2467:匿名'struct'的非法声明

这意味着仍然定义了_MSC_VER宏,并且已经包含了"windows.h".

当且仅当我使用Visual C++时,如何包含文件?

如何设置Visual C++以便将代码编译为标准C++,将所有Microsoft扩展标记为错误?

Bil*_*eal 3

当且仅当我使用 Visual C++ 时如何包含文件?

正如您已经演示的那样,通过检查_MSC_VER.

如何设置 Visual C++,使其将代码编译为标准 C++,并将所有 Microsoft 扩展标记为错误?

你不能。我不知道有哪个编译器允许这样做。标准完全允许诸如编译器版本的预定义宏之类的内容,因此它们不会作为“非标准扩展”而被禁用。

如果您想检查您的程序是否针对其他平台构建,请在其他平台上构建您的程序。GCC 和 Clang 会告诉你他们所接受的内容远比 Visual C++ 更好:)

  • @Pietro是的。如果您希望可移植,请更好地构建代码,以便隔离平台相关代码并仅对这些代码使用 MS 扩展。 (2认同)