Использование макросов WIN32 или _MSC_VER кроссплатформенный - PullRequest
8 голосов
/ 27 февраля 2010

Я компилирую под Linux (GCC 4.4.2) и Windows VS C ++ Express Edition 2008

В настоящее время я выполняю компиляцию в 32-разрядной версии Windows XP Pro и добавил это в свой исходный код.

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

Однако код в операторе if отключен (выделен серым цветом). Однако, если я сделаю следующее:

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

Код оператора if включен.

Мне просто интересно, что я должен использовать. Я видел много программистов, использующих WIN32. Однако, похоже, не работает для меня. Должен ли я использовать _MSC_VER вместо?

Большое спасибо за любой совет,

Ответы [ 3 ]

10 голосов
/ 27 февраля 2010

Нет WIN32. Если вы видели, что он используется в другом месте, это либо неправильно, либо код явно где-то сам определяет этот макрос.

Вы хотите _WIN32. См. https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros для списка предопределенных макросов в компиляторе Microsoft.

2 голосов
/ 28 августа 2016

Это сработало для меня!

#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;
}
1 голос
/ 27 февраля 2010

Вместо этого используйте _WIN32. Синтаксический анализатор IntelliSense в VS2008 проблематичен, это не обязательно решит вашу проблему. Он полностью переписан в VS2010.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...