Respuestas:
_MSC_VER
y posiblemente _MSC_FULL_VER
es lo que necesitas. También puede examinar visualc.hpp en cualquier instalación de impulso reciente para ver algunos ejemplos de uso.
Algunos valores para las versiones más recientes del compilador son:
MSVC++ 14.24 _MSC_VER == 1924 (Visual Studio 2019 version 16.4)
MSVC++ 14.23 _MSC_VER == 1923 (Visual Studio 2019 version 16.3)
MSVC++ 14.22 _MSC_VER == 1922 (Visual Studio 2019 version 16.2)
MSVC++ 14.21 _MSC_VER == 1921 (Visual Studio 2019 version 16.1)
MSVC++ 14.2 _MSC_VER == 1920 (Visual Studio 2019 version 16.0)
MSVC++ 14.16 _MSC_VER == 1916 (Visual Studio 2017 version 15.9)
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 Visual Studio que ve en el cuadro acerca de, no al año en el nombre. Una lista completa se puede encontrar aquí . A partir de hace poco , Visual Studio comenzará a actualizar sus rangos monotónicamente, 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
.....
#if defined _MSC_VER # if _MSC_VER >= 1800 # include <inttypes.h>
. Sin embargo, inttypes.h no se puede encontrar. Muy extraño
_MSC_VER
. Espero que esto ayude
Sí _MSC_VER es la macro que te dará la versión del compilador. El último número de lanzamientos de Visual C ++ ha sido de la forma <compiler-major-version>.00.<build-number>
, donde 00 es el número menor. Entonces _MSC_VER
lo evaluaré <major-version><minor-version>
.
Puedes usar un 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
Parece que las actualizaciones entre lanzamientos sucesivos del compilador, no han modificado el 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 de versiones más detallada (como el número de compilación del compilador) se puede encontrar usando otras variables de preprocesador incorporadas aquí .
_MSC_VER_ == 1500
, sin embargo, si MS modificó las _MSC_VER
actualizaciones del compilador, los paquetes de servicio, etc. (no creo que lo hayan hecho), entonces la == 1500
verificación podría romperse. Es por eso que lo he codificado de esa manera.
_MSC_VER debe definirse con 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 según el compilador con el que se compiló? Sí, probablemente estabas buscando el #ifdef. :))
Mediante el uso de la _MSC_VER
macro.
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.
Esto es un poco viejo pero debería comenzar:
//******************************************************************************
// 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
_MSC_VER
no requiere que lo incluyas stdio.h
, lo que se puede probar fácilmenteecho int i = _MSC_VER; > tmp.c
cl /nologo /c tmp.c
En Visual Studio, ve a ayudar | sobre y mira la versión de Visual Studio que estás usando para compilar tu aplicación.