Как обнаружить, если я компилирую код с Visual Studio 2008?
Есть ли способ узнать, компилирую ли я в Microsoft Visual Studio 2008?
Ответы
Ответ 1
_MSC_VER
и, возможно, _MSC_FULL_VER
- это то, что вам нужно. Вы также можете изучить visualc.hpp в любой новой версии boost для некоторых примеров использования.
Некоторые значения для более поздних версий компилятора:
MSVC++ 14.1 _MSC_VER == 1911 (Visual Studio 2017)
MSVC++ 14.1 _MSC_VER == 1910 (Visual Studio 2017)
MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015)
MSVC++ 12.0 _MSC_VER == 1800 (Visual Studio 2013)
MSVC++ 11.0 _MSC_VER == 1700 (Visual Studio 2012)
MSVC++ 10.0 _MSC_VER == 1600 (Visual Studio 2010)
MSVC++ 9.0 _MSC_FULL_VER == 150030729 (Visual Studio 2008, SP1)
MSVC++ 9.0 _MSC_VER == 1500 (Visual Studio 2008)
MSVC++ 8.0 _MSC_VER == 1400 (Visual Studio 2005)
MSVC++ 7.1 _MSC_VER == 1310 (Visual Studio 2003)
MSVC++ 7.0 _MSC_VER == 1300
MSVC++ 6.0 _MSC_VER == 1200
MSVC++ 5.0 _MSC_VER == 1100
Номер версии выше, конечно, относится к основной версии вашей Visual Studio, которую вы видите в поле about, а не в году в названии. Подробный список можно найти здесь. Начиная с недавнего времени, Visual Studio начнет обновлять его диапазоны монотонно, то есть вы должны проверять диапазоны, а не точные значения компилятора.
cl.exe /?
даст подсказку используемой версии, например:
c:\program files (x86)\microsoft visual studio 11.0\vc\bin>cl /?
Microsoft (R) C/C++ Optimizing Compiler Version 17.00.50727.1 for x86
.....
Ответ 2
Yep _MSC_VER - это макрос, который предоставит вам версию компилятора. Последнее количество выпусков Visual С++ имеет форму <compiler-major-version>.00.<build-number>
, где 00 - младшее число. Поэтому _MSC_VER
будет оцениваться до <major-version><minor-version>
.
Вы можете использовать такой код:
#if (_MSC_VER == 1500)
// ... Do VC9/Visual Studio 2008 specific stuff
#elif (_MSC_VER == 1600)
// ... Do VC10/Visual Studio 2010 specific stuff
#elif (_MSC_VER == 1700)
// ... Do VC11/Visual Studio 2012 specific stuff
#endif
Появляются обновления между последовательными версиями компилятора, не изменяются compiler-minor-version
, поэтому следующий код не требуется:
#if (_MSC_VER >= 1500 && _MSC_VER <= 1600)
// ... Do VC9/Visual Studio 2008 specific stuff
#endif
Доступ к более подробной информации о версии (например, номер сборки компилятора) можно найти, используя другие встроенные переменные препроцессора здесь.
Ответ 3
_MSC_VER должен быть определен для определенного номера версии. Вы можете либо #ifdef на нем, либо вы можете использовать фактическое определение и выполнить тест времени выполнения. (Если по какой-то причине вы хотели запустить другой код на основе компилятора, с которым он был скомпилирован? Да, возможно, вы искали #ifdef.:))
Ответ 4
Используя макрос _MSC_VER
.
Ответ 5
В качестве более общего ответа http://sourceforge.net/p/predef/wiki/Home/ поддерживает список макросов для обнаружения специфических компиляторов, операционных систем, архитектур, стандартов и т.д.
Ответ 6
Это немного устарело, но вам нужно начать:
//******************************************************************************
// Automated platform detection
//******************************************************************************
// _WIN32 is used by
// Visual C++
#ifdef _WIN32
#define __NT__
#endif
// Define __MAC__ platform indicator
#ifdef macintosh
#define __MAC__
#endif
// Define __OSX__ platform indicator
#ifdef __APPLE__
#define __OSX__
#endif
// Define __WIN16__ platform indicator
#ifdef _Windows_
#ifndef __NT__
#define __WIN16__
#endif
#endif
// Define Windows CE platform indicator
#ifdef WIN32_PLATFORM_HPCPRO
#define __WINCE__
#endif
#if (_WIN32_WCE == 300) // for Pocket PC
#define __POCKETPC__
#define __WINCE__
//#if (_WIN32_WCE == 211) // for Palm-size PC 2.11 (Wyvern)
//#if (_WIN32_WCE == 201) // for Palm-size PC 2.01 (Gryphon)
//#ifdef WIN32_PLATFORM_HPC2000 // for H/PC 2000 (Galileo)
#endif
Ответ 7
В визуальной студии перейдите по ссылке | и посмотрите на версию Visual Studio, которую вы используете для компиляции вашего приложения.