2008-09-16 15 views

Respuesta

464

_MSC_VER y posiblemente _MSC_FULL_VER es lo que necesita. 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.1 _MSC_VER == 1912 (Visual Studio 2017) 
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 

El número de versión anterior, por supuesto, se refiere a la versión principal de su estudio visual que se ve en el cuadro acerca, no al año el nombre. Se puede encontrar una lista detallada here. Starting recently, 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á un toque 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 
..... 
+0

que pas ???? por lo general, utiliza> = para verificar la versión, no == –

+27

Lo sentimos, pero ¿por qué Microsoft no hace que esta información sea fácil de encontrar? esta publicación es muy útil, pero no debería ser requerida. – chrisw

+5

Parece que esta macro no refleja la versión del compilador utilizada por el proyecto. Es decir.si abre un proyecto VS2010 en una versión más nueva sin actualizar el proyecto, esta macro no refleja el compilador utilizado, solo la versión IDE. – thomthom

-15

En visual studio, vaya a ayuda | y vea la versión de Visual Studio que está utilizando para compilar su aplicación.

+6

Esto no puede ser grave. Especialmente de alguien con una reputación como esta. ¿Supongo que solo estabas haciendo una broma? – BuvinJ

+1

Creo que acaba de interpretar la pregunta de una manera diferente. Después de todo, esta es una de las primeras respuestas a la pregunta. –

9

_MSC_VER se debe definir con un número de versión específico. Puede #ifdef en él, o puede usar la definición real y hacer una prueba en tiempo de ejecución. (Si por algún motivo desea ejecutar un código diferente según el compilador con el que se compiló? Sí, probablemente estaba buscando el #ifdef. :))

6

Al usar la macro _MSC_VER.

1

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 
+0

Me gusta esta respuesta mucho más que la que más votó. Porque _MSC_VER requiere que incluya stdio.h –

+0

'_MSC_VER' no requiere que incluya' stdio.h', que puede ser fácilmente probado 'echo int i = _MSC_VER; > tmp.c' 'cl/nologo/c tmp.c' –

38

Sí _MSC_VER es la macro que ponerlas usted 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>.

Puede utilizar 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 cambios entre versiones sucesivas del compilador, no han modificado el compiler-minor-version, por lo que el siguiente código no se requiere:

#if (_MSC_VER >= 1500 && _MSC_VER <= 1600) 
    // ... Do VC9/Visual Studio 2008 specific stuff 
#endif 

Acceso para obtener información de versiones más detallada (como el número de compilación del compilador) se puede encontrar utilizando otras variables del preprocesador integrado here.

+0

solo necesita comprobar == 1500 en ese caso –

+0

@ José, es cierto que podríamos simplificarlo simplemente para comprobar si hay VC++ 9 con' _MSC_VER_ == 1500', sin embargo, si MS modificó '_MSC_VER' con las actualizaciones del compilador, paquetes de servicio, etc. (no creo que alguna vez lo hayan hecho), entonces la comprobación' == 1500' podría romperse. Por eso lo he codificado de esa manera. – display101

+0

__MSC_VER evalúa los componentes de número mayor y menor de la versión del compilador. Esto no cambiará con una actualización, hay _MSC_FULL_VER con incluir el número de compilación también, nunca he tenido que usar eso. –

Cuestiones relacionadas