¿Hay alguna manera de saber si estoy compilando en Microsoft Visual Studio 2008?Cómo detectar si estoy compilando código con Visual Studio 2008?
Respuesta
_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
.....
En visual studio, vaya a ayuda | y vea la versión de Visual Studio que está utilizando para compilar su aplicación.
Esto no puede ser grave. Especialmente de alguien con una reputación como esta. ¿Supongo que solo estabas haciendo una broma? – BuvinJ
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. –
_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. :))
Al usar la macro _MSC_VER
.
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
Me gusta esta respuesta mucho más que la que más votó. Porque _MSC_VER requiere que incluya stdio.h –
'_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' –
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.
solo necesita comprobar == 1500 en ese caso –
@ 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
__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. –
Como una 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.
- 1. Compilando CUDA con Visual Studio 2010
- 2. PREfast con Visual Studio 2008
- 3. Cómo usar IronPython con Visual Studio 2008
- 4. ¿Visual Studio 2010 RC funciona bien con Visual Studio 2008?
- 5. ¿Cómo puedo detectar si estoy compilando para una arquitectura de 64 bits en C++
- 6. Múltiples monitores con Visual Studio 2008
- 7. ¿Cómo puedo saber si tengo instalado Visual Studio 2008 SP1?
- 8. ¿Cómo instalo MVC en Visual Studio 2008?
- 9. Colores en Visual Studio 2008
- 10. Recortes de código de Visual Studio 2008 para otro idioma
- 11. Líneas de código de corte largo en Visual Studio 2008
- 12. Visual Studio 2008/2010 Marcadores de código Copia de seguridad
- 13. Cómo lidiar con la Advertencia C4100 en Visual Studio 2008
- 14. ¿Cómo puede saber Gfortran si estoy compilando el código f90 o f95?
- 15. ReSharper y Visual Studio 2008
- 16. Depuración de Visual Studio 2008 - Código de omisión
- 17. Analizador de código estático: no administrado C++ Visual Studio 2008
- 18. Visual Studio 2008 Auto Save
- 19. Falta el análisis de código en Visual Studio 2008
- 20. Cómo comenzar con las pruebas unitarias en Visual Studio 2008
- 21. ¿Cómo puedo integrar svn con Visual Studio 2008?
- 22. Cómo compilar libevent versión 2.0.10 con Visual Studio 2008
- 23. Touch typing en Visual Studio 2008
- 24. ¿Cómo creo impulso con Visual Studio 2008 cuando tengo instaladas varias versiones de Visual Studio?
- 25. Visual Studio 2008 se cuelga horriblemente
- 26. Formateador de código Visual Studio
- 27. visual studio 2008 depurador loco omitiendo!
- 28. Depuración de JavaScript en Visual Studio 2008
- 29. Cómo deshacer 'excluir del proyecto en Visual Studio 2008
- 30. Pruebas unitarias javascript en visual studio 2008
que pas ???? por lo general, utiliza> = para verificar la versión, no == –
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
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