Respuestas:
_MSC_VERy posiblemente _MSC_FULL_VERes 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_VERlo 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_VERactualizaciones del compilador, los paquetes de servicio, etc. (no creo que lo hayan hecho), entonces la == 1500verificació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_VERmacro.
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_VERno 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.