c++ - valido - ¿Cómo detectar si estoy compilando código con una versión particular de Visual Studio?
visual studio code (7)
Como respuesta más general, http://sourceforge.net/p/predef/wiki/Home/ mantiene una lista de macros para detectar compiladores específicos, sistemas operativos, arquitecturas, estándares y más.
¿Hay alguna forma de saber si estoy compilando bajo una versión específica de Microsoft Visual Studio?
En visual studio, ve a ayudar | acerca y mira la versión de Visual Studio que estás usando para compilar tu aplicación.
Esto es un poco viejo pero debería empezar:
//******************************************************************************
// 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
Mediante el uso de la macro _MSC_VER
.
Sí, _MSC_VER es la macro que te dará la versión del compilador. El último número de versiones de Visual C ++ ha sido de la forma <compiler-major-version>.00.<build-number>
, donde 00 es el número menor. Entonces _MSC_VER
evaluará a <major-version><minor-version>
.
Puedes usar código como este:
#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
Aparece actualizaciones entre versiones sucesivas del compilador, no se ha modificado la compiler-minor-version
del compiler-minor-version
, por lo que no se requiere el siguiente código:
#if (_MSC_VER >= 1500 && _MSC_VER <= 1600)
// ... Do VC9/Visual Studio 2008 specific stuff
#endif
El acceso a información más detallada sobre las versiones (como el número de compilación del compilador) se puede encontrar utilizando otras variables integradas de preprocesador here .
_MSC_VER se debe definir para un número de versión específico. Puede #ifdef en él, o puede usar la definición real y hacer una prueba de tiempo de ejecución. (¿Si por alguna razón quisieras ejecutar un código diferente basado en el compilador con el que se compiló? Sí, probablemente estabas buscando el #ifdef. :))
_MSC_VER
que necesitas es _MSC_VER
y posiblemente _MSC_FULL_VER
. También puede examinar visualc.hpp en cualquier instalación de impulso reciente para algunos ejemplos de uso.
Algunos valores para las versiones más recientes del compilador son:
MSVC++ 14.15 _MSC_VER == 1915 (Visual Studio 2017 version 15.8)
MSVC++ 14.14 _MSC_VER == 1914 (Visual Studio 2017 version 15.7)
MSVC++ 14.13 _MSC_VER == 1913 (Visual Studio 2017 version 15.6)
MSVC++ 14.12 _MSC_VER == 1912 (Visual Studio 2017 version 15.5)
MSVC++ 14.11 _MSC_VER == 1911 (Visual Studio 2017 version 15.3)
MSVC++ 14.1 _MSC_VER == 1910 (Visual Studio 2017 version 15.0)
MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015 version 14.0)
MSVC++ 12.0 _MSC_VER == 1800 (Visual Studio 2013 version 12.0)
MSVC++ 11.0 _MSC_VER == 1700 (Visual Studio 2012 version 11.0)
MSVC++ 10.0 _MSC_VER == 1600 (Visual Studio 2010 version 10.0)
MSVC++ 9.0 _MSC_FULL_VER == 150030729 (Visual Studio 2008, SP1)
MSVC++ 9.0 _MSC_VER == 1500 (Visual Studio 2008 version 9.0)
MSVC++ 8.0 _MSC_VER == 1400 (Visual Studio 2005 version 8.0)
MSVC++ 7.1 _MSC_VER == 1310 (Visual Studio .NET 2003 version 7.1)
MSVC++ 7.0 _MSC_VER == 1300 (Visual Studio .NET 2002 version 7.0)
MSVC++ 6.0 _MSC_VER == 1200 (Visual Studio 6.0 version 6.0)
MSVC++ 5.0 _MSC_VER == 1100 (Visual Studio 97 version 5.0)
El número de versión anterior, por supuesto, se refiere a la versión principal de su estudio visual que ve en el cuadro acerca de, no al año en el nombre. Una lista completa se puede encontrar here . A partir de hace poco , Visual Studio comenzará a actualizar sus rangos monótonamente, lo que significa que debe verificar los rangos, en lugar de los valores exactos del compilador.
cl.exe /?
dará una pista de la versión utilizada, por ejemplo:
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
.....