使用宏WIN32或_MSC_VER跨平台

时间:2010-02-27 16:56:49

标签: c

我正在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吗?

非常感谢任何建议,

3 个答案:

答案 0 :(得分:10)

没有WIN32。如果您已经看到它在其他地方使用过,那么它或者是错误的,或者代码是在某处明确定义宏本身。

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

答案 1 :(得分: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;
}

答案 2 :(得分:1)

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