как определить _MSC_VER? - PullRequest
       16

как определить _MSC_VER?

3 голосов
/ 14 марта 2012

Я работаю в Visual Studio, но мой проект для среды на основе POSIX (мармелад SDK). В этом проекте релиз build компилируется с помощью gcc для ARM, но отладочная версия работает на windows и компилируется компилятором MS. Также эта среда имеет собственную реализацию STL и других стандартных библиотек.

Многие из этих библиотек c ++ имеют такой код:

#if defined( _MSC_VER )
   #include <Windows.h>
#else
   #include <pthread.h>
#endif

Возможно ли отменить определение макроса _MSC_VER? - чтобы библиотеки C ++ могли определять систему POSIX здесь.

Ответы [ 2 ]

5 голосов
/ 23 апреля 2013

_MSC_VER определяется (и всегда должен быть) при компиляции с помощью компилятора Microsoft, чтобы он "вычислял компоненты старшего и младшего номеров в номере версии компилятора". Поэтому в коде используется неправильный макрос-тест, поскольку он всегда будет определен для некоторого значения для вашего компилятора независимо от различий среды Windows.

Вместо того, чтобы уничтожать определение _MSC_VER (которое может привести к другим проблемам, если какой-либо код действительно хочет знать версию компилятора), вместо этого вам действительно следует исправить условие, чтобы использовать более подходящий макрос-тест которая различает типы сред Windows, с которыми вы можете столкнуться.

Смотрите более полный список предопределенных макросов, которые вы могли бы рассмотреть здесь.

http://msdn.microsoft.com/en-us/library/vstudio/b0084kay.aspx

Вы можете заменить условие ...

# if someOtherConditionGoesHere

... или дополнить его дополнительными условиями, например

# если определено (_MSC_VER) && someOtherConditionGoesHere

2 голосов
/ 14 марта 2012

Конечно:

#undef _MSC_VER

#if defined( _MSC_VER )
   #include <Windows.h>
#else
   #include <pthread.h>
#endif

Или #undef перед включением файла, в котором используется _MSC_VER.

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