Microsoft Visual C++

Ajustar Compartir Imprimir Citar
Producto de desarrollo integrado por Microsoft

Microsoft Visual C++ (MSVC) es un compilador para los lenguajes de programación C, C++, C++/CLI y C++/CX de Microsoft. MSVC es software propietario; originalmente era un producto independiente, pero luego se convirtió en parte de Visual Studio y estuvo disponible tanto en forma de software de prueba como gratuito. Cuenta con herramientas para desarrollar y depurar código C++, especialmente código escrito para la API de Windows, DirectX y.NET.

Muchas aplicaciones requieren paquetes de biblioteca de tiempo de ejecución de Visual C++ redistribuibles para funcionar correctamente. Estos paquetes se instalan con frecuencia por separado de las aplicaciones que admiten, lo que permite que varias aplicaciones utilicen el paquete con una sola instalación. Estos paquetes redistribuibles y de tiempo de ejecución de Visual C++ se instalan principalmente para bibliotecas estándar que utilizan muchas aplicaciones.

Historia

El predecesor de Visual C++ se llamaba Microsoft C/C++. También había un Microsoft QuickC 2.5 y un Microsoft QuickC para Windows 1.0. El compilador de Visual C++ todavía se conoce como Microsoft C/C++ y, a partir del lanzamiento de Visual C++ 2015 Update 2, se encuentra en la versión 14.0.23918.0.

Versiones de 16 bits

Versiones estrictamente de 32 bits

Versiones de 32 y 64 bits

Numeración de versión interna

Hay varios números de versión diferentes a tener en cuenta al trabajar con Visual C o C++. El más antiguo y original de estos es el número de versión del compilador, que se ha incrementado monótonamente desde los primeros días del compilador Microsoft C. Esta es la versión devuelta al ejecutar el comando cl.exe solo sin ninguna opción. Al tomar dos dígitos después del decimal y quitar el punto decimal, esto también se convierte en el valor de la macro del preprocesador C: _MSC_VER, y la variable CMake: MSVC_VERSION. Una versión más larga de la macro C es _MSC_FULL_VER para hacer distinciones más detalladas entre las compilaciones del compilador. Un ejemplo de _MSC_VER es '1933' para representar la versión 19.33 del compilador Microsoft C/C++, y de _MSC_FULL_VER es '193331630'. Debe usar el operador >= para probar el valor de _MSC_VER o _MSC_FULL_VER en lugar de igualdad.

La versión del producto Visual, como '17.3.4', designa la versión de Visual Studio con la que se empaquetó la versión 19.33 del compilador. Luego está la versión de la biblioteca en tiempo de ejecución de Microsoft Visual C/C++, p. '14.3'. A partir de esto, también se puede deducir la versión del conjunto de herramientas, que se puede obtener tomando los primeros tres dígitos de la versión de la biblioteca en tiempo de ejecución y quitando el decimal, p. '143'. Incluye la biblioteca de tiempo de ejecución de Visual C/C++, así como compiladores, enlazadores, ensambladores, otras herramientas de compilación y bibliotecas coincidentes y archivos de encabezado. La siguiente es una tabla (raspable) de los números de versión correlacionados conocidos.

Versiones Visual Studio
nombre del productoproducto VersiónAño de comercialización_MSC_VER_MSC_FULL_VERversión de la biblioteca de tiempo de ejecución
Microsoft C 6.0600
Microsoft C/C++ 7.0700
Visual C++ 1.01.08001
Visual C++ 2.02.09002
Visual C++ 4.04.010004
Visual C++ 4.14.1Graben 19, 10104.1
Visual C++ 4.24.210204.2
Visual Studio 97 [5.0]5.09711005
Visual Studio 6.0 SP56.01200120088046
Visual Studio 6.0 SP66.01200120088046
Visual Studio.NET 2002 [7.0]7.020021300130094667
Visual Studio.NET 2003 Beta [7.1]7.120031310131022927.1
Visual Studio Toolkit 2003 [7.1]7.120031310131030527.1
Visual Studio.NET 2003 [7.1]7.120031310131030777.1
Visual Studio.NET 2003 SP1 [7.1]7.120031310131060307.1
Visual Studio 2005 Beta 1 [8.0]8.0200514001400406078
Visual Studio 2005 Beta 2 [8.0]8.0200514001400502158
Visual Studio 2005 [8.0]8.0200514001400503208
Visual Studio 2005 SP1 [8.0]8.0200514001400507278
Visual Studio 2008 Beta 2 [9.0]8.0200815001500207069
Visual Studio 2008 [9.0]9.0201015001500210229
Visual Studio 2008 SP1 [9.0]9.0201015001500307299
Visual Studio 2010 Beta 1 [10.0]10.02010160016002050610
Visual Studio 2010 Beta 2 [10.0]10.02010160016002100310
Visual Studio 2010 [10.0]10.02010160016003031910
Visual Studio 2010 SP1 [10.0]10.02010160016004021910
Visual Studio 2012 [11.0]11.02012170017005072711
Visual Studio 2012 Update 1 [11.0]11.02012170017005110611
Visual Studio 2012 Update 2 [11.0]11.02012170017006031511
Visual Studio 2012 Update 3 [11.0]11.02012170017006061011
Visual Studio 2012 Update 4 [11.0]11.02012170017006103011
Visual Studio 2012 November CTP [11.0]11.02012170017005102511
Visual Studio 2013 Preview [12.0]12.02013180018002061712
Visual Studio 2013 RC [12.0]12.02013180018002082712
Visual Studio 2013 [12.0]12.02013180018002100512
Visual Studio 2013 Update 1 [12.0]12.02013180018002100512
Visual Studio 2013 Update2 RC [12.0]12.0201318001800303032412
Visual Studio 2013 Update 2 [12.0]12.02013180018003050112
Visual Studio 2013 Update 3 [12.0]12.02013180018003072312
Visual Studio 2013 Update 4 [12.0]12.02013180018003110112
Visual Studio 2013 Update 5 [12.0]12.02013180018004062912
Visual Studio 2013 November CTP [12.0]12.02013180018002111412
Visual Studio 2015 [14.0]14.02015190019002302614
Visual Studio 2015 Update 1 [14.0]14.02015190019002350614
Visual Studio 2015 Update 2 [14.0]14.02015190019002391814
Visual Studio 2015 Update 3 [14.0]14.02015190019002421014
Visual Studio 2017 versión 15.015.02017191019102501714.1
Visual Studio 2017 versión 15.115.12017191019102501714.1
Visual Studio 2017 versión 15.215.22017191019102501714.1
Visual Studio 2017 versión 15.3.315.3.32017191119112550714.11
Visual Studio 2017 versión 15.4.415.4.42017191119112554214.11
Visual Studio 2017 versión 15.4.515.4.52017191119112554714.11
Visual Studio 2017 versión 15.5.215.5.22017191219122583114.12
Visual Studio 2017 versión 15.5.315.5.32017191219122583414.12
Visual Studio 2017 versión 15.5.415.5.42017191219122583414.12
Visual Studio 2017 versión 15.5.615.5.62017191219122583514.12
Visual Studio 2017 versión 15.5.715.5.72017191219122583514.12
Visual Studio 2017 versión 15.6.015.6.02017191319132612814.13
Visual Studio 2017 versión 15.6.115.6.12017191319132612814.13
Visual Studio 2017 versión 15.6.215.6.22017191319132612814.13
Visual Studio 2017 versión 15.6.315.6.32017191319132612914.13
Visual Studio 2017 versión 15.6.415.6.42017191319132612914.13
Visual Studio 2017 versión 15.6.615.6.62017191319132613114.13
Visual Studio 2017 versión 15.6.715.6.72017191319132613214.13
Visual Studio 2017 versión 15.7.115.7.12017191419142642814.14
Visual Studio 2017 versión 15.7.215.7.22017191419142642914.14
Visual Studio 2017 versión 15.7.315.7.32017191419142643014.14
Visual Studio 2017 versión 15.7.515.7.52017191419142643314.14
Visual Studio 2017 versión 15.9.115.9.12017191619162702314.16
Visual Studio 2017 versión 15.9.415.9.42017191619162702514.16
Visual Studio 2017 versión 15.9.515.9.52017191619162702614.16
Visual Studio 2017 versión 15.9.715.9.72017191619162702714.16
Visual Studio 2017 versión 15.9.1115.9.112017191619162703014.16
Visual Studio 2019 versión 16.0.016.0.02019192019202750814.20
Visual Studio 2019 versión 16.1.216.1.22019192119212770214.21
Visual Studio 2019 versión 16.2.316.2.32019192219222790514.21
Visual Studio 2019 versión 16.3.216.3.22019192319232810514.21
Visual Studio 2019 versión 16.4.016.4.02019192419242831414.24
Visual Studio 2019 versión 16.5.116.5.12019192519252861114.25
Visual Studio 2019 versión 16.6.216.6.22019192619262880614.26
Visual Studio 2019 versión 16.716,72019192719272911214.27
Visual Studio 2019 versión 16.8.116.8.12019192819282933314.28
Visual Studio 2019 versión 16.8.216.8.22019192819282933414.28
Visual Studio 2019 versión 16.9.216.9.22019192819282991314.28
Visual Studio 2019 versión 16.11.216.11.22019192919293013314.29
Visual Studio 2019 versión 16.11.2416.11.242019192919293014814.29
Visual Studio 2022 versión 17.0.117.0.12022193019303070514.30
Visual Studio 2022 versión 17.0.217.0.22022193019303070614.31
Visual Studio 2022 versión 17.2.217.2.22022193219323132914.32
Visual Studio 2022 versión 17.3.417.3.42022193319333163014.33

La fuente de esta tabla es.

Compatibilidad

ABI

La ABI del compilador de Visual C++ históricamente ha cambiado entre las principales versiones del compilador. Este es especialmente el caso de los contenedores STL, donde los tamaños de los contenedores han variado mucho entre las versiones del compilador. Por lo tanto, Microsoft recomienda no usar interfaces de C++ en los límites del módulo cuando se desea habilitar el código de cliente compilado con una versión de compilador diferente. En lugar de C++, Microsoft recomienda usar interfaces C o COM, que están diseñadas para tener una ABI estable entre las versiones del compilador.

Todas las versiones 14.x de MSVC tienen una ABI estable y los archivos binarios creados con estas versiones se pueden mezclar de forma compatible con versiones posteriores, teniendo en cuenta las siguientes restricciones:

Bibliotecas de tiempo de ejecución de C

Visual C++ se envía con diferentes versiones de bibliotecas de tiempo de ejecución de C. Esto significa que los usuarios pueden compilar su código con cualquiera de las bibliotecas disponibles. Sin embargo, esto puede causar algunos problemas al usar diferentes componentes (DLL, EXE) en el mismo programa. Un ejemplo típico es un programa que utiliza diferentes bibliotecas. El usuario debe usar el mismo C Run-Time para todos los componentes del programa, a menos que comprenda las implicaciones. Microsoft recomienda utilizar la biblioteca de vínculos dinámicos multiproceso (opción de compilador /MD o /MDd) para evitar posibles problemas.

POSIX

Aunque Microsoft's CRT implementa un gran subconjunto de interfaces POSIX, el compilador de Visual C++ emitirá una advertencia en cada uso de dichas funciones de forma predeterminada. La razón es que los estándares C y C++ requieren un prefijo de subrayado antes de las interfaces definidas por la implementación, por lo que el uso de estas funciones no es estándar. Sin embargo, los sistemas que en realidad son compatibles con POSIX no aceptarían estos nombres subrayados, y es más portátil desactivar la advertencia en su lugar.

C

Aunque el producto se originó como un IDE para el lenguaje de programación C, durante muchos años la compatibilidad del compilador con ese lenguaje se ajustaba únicamente a la edición original del estándar C, que data de 1989, pero no a la revisión C99 de el estandar. No había planes para apoyar C99 incluso en 2011, más de una década después de su publicación.

Visual C++ 2013 finalmente agregó soporte para varias funciones de C99 en su modo C (incluidos inicializadores designados, literales compuestos y el tipo _Bool), aunque aún no estaba completo. Visual C++ 2015 mejoró aún más la compatibilidad con C99, con compatibilidad total con la biblioteca estándar de C99, excepto las funciones que requieren funciones del lenguaje C99 que aún no son compatibles con el compilador.

La mayoría de los cambios de la revisión C11 del estándar todavía no son compatibles con Visual C++ 2017. Por ejemplo, las selecciones genéricas a través de la palabra clave _Generic no son compatibles con el compilador y dan como resultado una sintaxis error.

El preprocesador se revisó en 2018, con C11 a la vista:

La conformidad completa C11 está en nuestra hoja de ruta, y la actualización del preprocesador es sólo el primer paso en ese proceso. El C11 _Generic característica no es en realidad parte del preprocesador, por lo que aún no se ha implementado. Cuando se implementa espero que la característica funcione independientemente de si se utiliza la lógica preprocesador tradicional o actualizada.

El soporte

_Generic se comprometió con MSVC a partir de febrero de 2020, no está claro cuándo se enviará.

En septiembre de 2020, Microsoft anunció la compatibilidad con los estándares C11 y C17 en MSVC.

C++

Con la configuración predeterminada, MSVC no realiza búsquedas de nombres en dos fases, lo que evita que marque una amplia variedad de códigos no válidos. La mayoría de las comprobaciones se difieren a la instanciación de la plantilla. Las versiones más recientes solucionan este comportamiento, pero debe habilitarse mediante la opción de línea de comandos /permissive-.