【问题标题】:Using macros WIN32 or _MSC_VER cross-platform使用宏 WIN32 或 _MSC_VER 跨平台
【发布时间】:2011-01-21 20:00:19
【问题描述】:

我在 Linux (GCC 4.4.2) 和 Windows VS C++ Express Edition 2008 下编译

我目前正在 Windows XP Pro 32 位下编译,并将其添加到我的源代码中。

#if defined( WIN32 )
/* Do windows stuff here */
#endif

但是,if 语句中的代码被禁用(灰显)。但是,如果我执行以下操作:

#if defined( _MSC_VER )
/* Do windows stuff here */
#endif

if 语句代码已启用。

我只是想知道,我应该使用什么。我见过很多程序员使用WIN32。但是,似乎对我不起作用。我应该改用 _MSC_VER 吗?

非常感谢您的建议,

【问题讨论】:

    标签: c


    【解决方案1】:

    没有WIN32。如果您看到它在其他地方被使用,那么它要么是错误的,要么是代码在某处明确定义了该宏本身。

    你想要_WIN32。有关 Microsoft 编译器中预定义宏的列表,请参阅 https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros

    【讨论】:

      【解决方案2】:

      这对我有用!

      #if defined (_WIN32)
      #define PLATFORM "Windows"
      #elif defined (__linux)
      #define PLATFORM "Linux"
      #endif
      #include <iostream>
      using namespace std;
      
      int main()
      {
        cout << PLATFORM << "System" << endl;
        return 0;
      }
      

      【讨论】:

      • 您好,欢迎来到 StackOverflow。请以可读的方式格式化您的答案。编辑帖子时,您可以在侧栏上看到一些格式指南。
      • 感谢您为我解决这个问题。下次我一定会正确格式化我的代码。
      【解决方案3】:

      请改用 _WIN32。 VS2008中的IntelliSense解析器很麻烦,这不一定能解决你的问题。 VS2010 完全重写。

      【讨论】:

        猜你喜欢
        • 2011-03-11
        • 2011-02-28
        • 1970-01-01
        • 1970-01-01
        • 2016-05-11
        • 1970-01-01
        • 1970-01-01
        • 2018-03-28
        • 1970-01-01
        相关资源
        最近更新 更多