【问题标题】:How can I undefine the System Definitions of Visual Studio 2012?如何取消定义 Visual Studio 2012 的系统定义?
【发布时间】:2014-03-31 08:21:11
【问题描述】:

我使用 Visual Studio 2012 编辑面向 Linux 的源代码。问题是语法突出显示完全错误,因为它认为定义了 _WIN32、_MSC_VER 和类似的宏。我能做些什么来摆脱它们?

我尝试了两种方法:

  1. 在 C++ 的属性页中添加了 /u 命令;
  2. 添加了 /U"_WIN32" /U"_MSC_VER" 等等。

但没有任何效果。这个问题在 Visual Studio 2013 中也是一样的。

我该怎么办?

【问题讨论】:

  • 如果您定义它们,这是否重要?他们没有伤害任何东西,就让他们去吧。此外,您永远不知道第三方库是否需要它们。
  • 我只是用它来扫描linux项目的代码。定义会影响代码。
  • 代码相同。这些定义只影响代码的编译方式。如果您在其中有平台(即 linux-)特定部分,您可能需要它们,这样 MSVC 就不会在编译期间遇到它不知道的代码。

标签: c++ visual-studio-2012 macros compiler-flags


【解决方案1】:

这些是编译器预定义的宏。你只能在代码中#undef他们。可能使用自定义头文件。

无论如何,这个要求对我来说似乎很奇怪。如果要扫描 Linux 代码,为什么要使用 MSVC?如果 Linux 代码使用任何 GCC 扩展(经常这样做),则根本无法在 MSVC 下编译。

【讨论】:

  • 我只是用来扫码不编译。因为我熟悉 Visual Studio 中的热键。
  • 你提供的方法对我有帮助。谢谢。
【解决方案2】:

您可以在您的项目配置中编辑它们。

右键项目->属性->C/C++->预处理器->预处理器定义

【讨论】:

  • 我取消定义所有定义,包括从父级继承。
  • 你说得对,Visual Studio 无论如何都定义了它们,即使使用 /u。如果确实有必要,您可以#undef 它们,这在发布模式下有效,但在调试模式下无效。
【解决方案3】:

我创建了一个测试项目。定义仅在代码编译时受到影响。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 2015-06-28
    相关资源
    最近更新 更多