stringtranslate.com

MicrosoftVisual C++

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 pasó a formar parte de Visual Studio y estuvo disponible en formato de prueba y 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 suelen instalarse 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. [3]

Historia

El predecesor de Visual C++ se llamó 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. [ cita necesaria ]

Versiones de 16 bits

Versiones estrictamente de 32 bits

Versiones de 32 y 64 bits

Numeración de versiones internas

Hay varios números de versión diferentes a considerar cuando se trabaja con Visual C o C++. El más antiguo y original de ellos es el número de versión del compilador, que ha aumentado monótonamente desde los primeros días del compilador de Microsoft C. Esta es la versión que se devuelve al ejecutar el comando cl.exepor sí solo sin ninguna opción. Al tomar dos dígitos después del decimal y eliminar el punto decimal, esto también se convierte en el valor de la macro del preprocesador de C: _MSC_VERy la variable CMake MSVC_VERSION:. Una versión más larga de la macro C sirve _MSC_FULL_VERpara hacer distinciones más detalladas entre las compilaciones del compilador. Un ejemplo de _MSC_VERes "1933" para representar la versión 19.33 del compilador Microsoft C/C++ y de _MSC_FULL_VERes "193331630". Debe utilizar el >=operador para probar el valor de _MSC_VERo _MSC_FULL_VERen lugar de la 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 Microsoft Visual C/C++ Runtime Library, por ejemplo "14.3". 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 eliminando el decimal, por ejemplo, "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 (rapeable) de los números de versión correlacionados conocidos.

Compatibilidad

ABI

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

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

Bibliotecas de tiempo de ejecución de C

Visual C++ viene con diferentes versiones de bibliotecas de tiempo de ejecución de C. [59] Esto significa que los usuarios pueden compilar su código con cualquiera de las bibliotecas disponibles. Sin embargo, esto puede causar algunos problemas al utilizar diferentes componentes ( DLL , EXE ) en el mismo programa. Un ejemplo típico es un programa que utiliza diferentes bibliotecas . El usuario debe utilizar 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. [59]

POSIX

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

C

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

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

La mayoría de los cambios de la revisión C11 del estándar aún no eran compatibles con Visual C++ 2017. [65] Por ejemplo, _Genericel compilador no admite selecciones genéricas mediante la palabra clave y provoca un error de sintaxis. [66]

El preprocesador fue revisado en 2018, con C11 a la vista: [67]

La conformidad total con C11 está en nuestra hoja de ruta y la actualización del preprocesador es solo el primer paso en ese proceso. La función C11 _Genericen realidad no forma parte del preprocesador, por lo que aún no se ha implementado. Cuando se implemente, espero que la función funcione independientemente de si se utiliza la lógica del preprocesador tradicional o actualizada.

_GenericEl apoyo se ha comprometido a MSVC a partir de febrero de 2020. [68]

En septiembre de 2020, Microsoft anunció que la compatibilidad con los estándares C11 y C17 en MSVC llegaría en la versión 16.8. [69] Esto no incluía características opcionales, pero Microsoft indicó que estaban planeando agregar soporte para átomos y subprocesos en una fecha posterior. En la versión 17.5, se agregó soporte parcial (ya que faltan bloqueos atómicos ) y experimental (es decir, oculto detrás del indicador del compilador) para átomos [70] y en la versión 17.8, se agregó soporte para subprocesos, esta vez no detrás de un indicador del compilador. [71] [72]/experimental:c11atomics

C++

Con la configuración predeterminada, MSVC no realiza búsquedas de nombres en dos fases, lo que le impide marcar una amplia gama de códigos no válidos. La mayoría de las comprobaciones se difieren hasta la creación de instancias de plantilla. Las versiones más recientes solucionan este comportamiento, pero es necesario habilitarlo mediante la opción de línea de comandos /permissive-. [73]

Referencias

  1. ^ ab "Visual C++ agrega compatibilidad con Windows". InfoMundo . 22 de febrero de 1993. pág. 17.
  2. ^ Lextrait, Vincent (enero de 2010). "La baliza de los lenguajes de programación, v10.0". Archivado desde el original el 30 de mayo de 2012 . Consultado el 14 de marzo de 2010 .
  3. ^ "¿Necesito estos redistribuibles de Microsoft Visual C++?". ¡Pregúntale a Leo!. Consultado el 18 de noviembre de 2012.
  4. ^ Lenguaje informático - Número 06 (1985-02) (Publicaciones CL) (EE. UU.). Febrero de 1985.
  5. ^ Leibson, Steve (1 de febrero de 1985). "Reseñas de software: un equipo de expertos analiza 21 compiladores de C". Lenguaje de ordenador . Consultado el 5 de junio de 2020 .
  6. ^ Ladd, Scott Robert (1 de agosto de 1990). "Optimización con Microsoft C 6.0".
  7. ^ Myers, Ben (1 de julio de 1992). "Microsoft C/C++". Revista PC . Ziff Davis . pag. 387 . Consultado el 21 de diciembre de 2023 .
  8. ^ "Se anuncia la canalización de noticias/software". InfoMundo . Grupo de medios InfoWorld. 15 de marzo de 1993 . Consultado el 21 de diciembre de 2023 .
  9. ^ Obtenido de http://support.microsoft.com/kb/196831.
  10. ^ ab "Visual C++ es una potente herramienta de desarrollo". InfoMundo . 21 de junio de 1993. pág. 94.
  11. ^ "Debut de Rival DOS Extenders en la feria". InfoMundo . 1 de marzo de 1993. p. 18.
  12. ^ "Visual C++ 1.5 integra OLE, ODBC". InfoMundo . 8 de noviembre de 1993. pág. 5.
  13. ^ "Microsoft está preparado para presentar una versión preliminar de Visual C++ de 32 bits". InfoMundo . 19 de julio de 1993. p. 12.
  14. ^ "Los IDE de C++ evolucionan". InfoMundo . 4 de abril de 1994. p. 79.
  15. ^ "Estrategia de Microsoft Visual C++".
  16. ^ ab Cullens, Chane; Blackwell, Ken (1995). Desarrollo multiplataforma utilizando Visual C++. Libros M&T. ISBN 1-55851-428-7. Consultado el 27 de enero de 2024 .
  17. ^ Plamondon, James (9 de octubre de 1997). "Cronología del evangelismo generalizado" (PDF) . Corporación Microsoft . Consultado el 27 de enero de 2024 .
  18. ^ ab "Productos obsoletos". Archivado desde el original el 14 de agosto de 2005.
  19. ^ Toth, Viktor (1996). "1". Visual C++ 4.0 desatado. Indianápolis: SAMS Publishing . ISBN 9780672308741. Consultado el 26 de julio de 2013 .
  20. ^ "Historia de Visual Studio (Parte 3)". 6 de agosto de 2021.
  21. ^ "Cambios importantes de Visual C++ 4.0 a 4.2". Archivado desde el original el 28 de febrero de 2010 . Consultado el 18 de abril de 2018 .
  22. ^ "Cambios importantes de Visual C++ 4.2 a 5.0".
  23. ^ "Edición de aprendizaje de Microsoft Visual C++ 5.0". Microsoft . Archivado desde el original el 27 de abril de 1999.
  24. ^ "Microsoft Visual C++ 5.0 Edición profesional". Microsoft . Archivado desde el original el 27 de abril de 1999.
  25. ^ "Microsoft Visual C++ 5.0 Edición empresarial". Microsoft . Archivado desde el original el 17 de abril de 1999.
  26. ^ "Edición RISC de Microsoft Visual C++ 5.0". Microsoft . Archivado desde el original el 29 de abril de 1999.
  27. ^ Escudos, Nathan P. (8 de junio de 2018). "Denuncia criminal". Departamento de Justicia de Estados Unidos . pag. 128. Esto por sí solo no es un vínculo dispositivo, ya que Visual C++ 6.0, lanzado en 1998, todavía tiene defensores principalmente porque no requiere la instalación del marco .NET de Microsoft para ejecutarse, como sí lo hacen las versiones posteriores de Visual C++.
  28. ^ "Cambios importantes de Visual C++ 5.0 a 6.0". Archivado desde el original el 14 de septiembre de 2008.
  29. ^ Esta página enfatiza que los usuarios también deben ejecutar Windows 98, Windows NT 4.0 o Windows 2000. Obtenido de http://msdn2.microsoft.com/en-us/vstudio/aa718349.aspx.
  30. ^ Douglas Boling: programación de Microsoft Windows CE .NET, tercera edición de Microsoft Press; Tercera edición (25 de junio de 2003) Tapa blanda: 1264 páginas ISBN 978-0735618848 - CD complementario con Microsoft eMbedded Visual C++ 4.0 Service Pack 2 Archivado el 11 de febrero de 2013 en archive.today 
  31. ^ Cómo: modificar WINVER y _WIN32_WINNT
  32. ^ Cambios importantes
  33. ^ Plataformas Windows (CRT)
  34. ^ "Cambios importantes en Visual C++ 2008". 25 de mayo de 2023.
  35. ^ Blog del equipo de Visual C++. "IntelliSense, parte 2: el futuro" . Consultado el 12 de marzo de 2008 .
  36. ^ "Por qué IntelliSense no es compatible con C++/CLI en Visual Studio 2010" . Consultado el 13 de marzo de 2011 .
  37. ^ Blog del equipo de Visual C++ (27 de mayo de 2009). "Reconstrucción de Intellisense".
  38. ^ Blog del equipo de Visual C++. "Generación de código Visual C++ en Visual Studio 2010".
  39. ^ "Características principales del lenguaje C++ 0x en VC10: la tabla".
  40. ^ "Stephan T. Lavavej: todo lo que siempre quisiste saber sobre nullptr".
  41. ^ Blog del SDK de Microsoft Windows. "Lanzado: SDK de Windows para Windows 7 y .NET Framework 4".
  42. ^ CORRECCIÓN: Los compiladores de Visual C++ se eliminan al actualizar Visual Studio 2010 Professional o Visual Studio 2010 Express a Visual Studio 2010 SP1 si Windows SDK v7.1 está instalado
  43. ^ "Novedades de Visual C++ en Visual Studio 2012". Red de desarrolladores de Microsoft . Microsoft. 29 de noviembre de 2012 . Consultado el 20 de septiembre de 2015 .
  44. ^ "Novedades de Visual C++ en Visual Studio 2013". Red de desarrolladores de Microsoft . Microsoft. 28 de abril de 2015 . Consultado el 20 de septiembre de 2015 .
  45. ^ Eric Battalio (20 de julio de 2015). "Visual Studio 2015 RTM ya disponible". Blog del equipo de Visual C++ . Microsoft.
  46. ^ Stephan T. Lavavej (19 de junio de 2015). "Características de C++ 14/11/17 en VS 2015 RTM". Blog del equipo de Visual C++ . Microsoft.
  47. ^ Revisión de la inserción automática de telemetría de Microsoft en archivos binarios de C++
  48. ^ "¿Visual Studio agrega llamadas a funciones de telemetría a binario? • /r/cpp". Reddit . 7 de mayo de 2016 . Consultado el 17 de agosto de 2016 .
  49. ^ Julia Liuson (7 de marzo de 2017). "Anuncio de la disponibilidad general de Visual Studio 2017... y más". Blog del equipo de Visual Studio . Microsoft.
  50. ^ Amanda Silver (14 de febrero de 2019). "¡Únase a nosotros el 2 de abril para el lanzamiento de Visual Studio 2019!". Blog del equipo de Visual Studio . Microsoft.
  51. ^ Amanda Silver (8 de noviembre de 2021). "Visual Studio 2022 ya está disponible". Blog del equipo de Visual Studio . Microsoft.
  52. ^ "Macros de compilador predefinidos / Wiki / Compiladores". dev.to. ​22 de mayo de 2018 . Consultado el 20 de febrero de 2023 .
  53. ^ "Macros predefinidas/Microsoft Learn". aprender.microsoft.com . 8 de agosto de 2022 . Consultado el 26 de mayo de 2023 .
  54. ^ Microsoft MSDN: cambios importantes en Visual C++
  55. ^ Microsoft MSDN: contenedores (C++ moderno)
  56. ^ Microsoft MSDN: portabilidad dentro de los límites de ABI (C++ moderno)
  57. ^ Foro de Microsoft: compatibilidad binaria entre versiones de Visual C++ Archivado el 16 de febrero de 2013 en archive.today
  58. ^ docs.microsoft.com: compatibilidad binaria de C++ entre Visual Studio 2015, 2017 y 2019
  59. ^ ab C Bibliotecas en tiempo de ejecución
  60. ^ "Compatibilidad". Microsoft: características de la biblioteca CRT . 26 de octubre de 2022.
  61. ^ "Soporte C99". Conexión de Microsoft . Archivado desde el original el 4 de marzo de 2016 . Consultado el 21 de septiembre de 2015 .
  62. ^ "Novedades de Visual C++ en Visual Studio 2013". Red de desarrolladores de Microsoft . Microsoft. 28 de abril de 2015.
  63. ^ Pat Brenner (19 de julio de 2013). "Compatibilidad con la biblioteca C99 en Visual Studio 2013". Blog del equipo de Visual C++ . Microsoft.
  64. ^ "Novedades de Visual C++ en Visual Studio 2015". Red de desarrolladores de Microsoft . Microsoft. 3 de enero de 2018.
  65. ^ "Tutorial: compilar un programa C en la línea de comando". Documentación de Visual C++ . Microsoft. 10 de mayo de 2022.
  66. ^ "MSVC 2017 no admite _Generic (escriba macros genéricas) en C".
  67. ^ Luvsanbat, Bat-Ulzii (6 de julio de 2018). "Progreso del preprocesador MSVC hacia la conformidad". Red de desarrolladores de Microsoft . Archivado desde el original el 3 de marzo de 2024.
  68. ^ "Funciones y correcciones de C ++ 20". Reddit . 3 de julio de 2020.
  69. ^ "El soporte estándar C11 y C17 llega a MSVC". 14 de septiembre de 2020.
  70. ^ "C11 Atomics en Visual Studio 2022 versión 17.5 Vista previa 2". 2022-12-13.
  71. ^ "Subprocesos C11 en Visual Studio 2022 versión 17.8 Vista previa 2". 2023-09-26.
  72. ^ Murphy, Adrián (14 de noviembre de 2023). "¡Visual Studio 17.8 ya disponible!". Blog de estudio visual . Consultado el 12 de enero de 2024 .
  73. ^ "La compatibilidad con la búsqueda de nombres en dos fases llega a MSVC". 2017-09-11.

Otras lecturas

enlaces externos