Microsoft Visual C++ ( MSVC ) est un compilateur pour les langages de programmation C , C++ , C++/CLI et C++/CX développé par Microsoft . Logiciel propriétaire , MSVC était initialement un produit autonome, mais il a ensuite été intégré à Visual Studio et est disponible en versions d'évaluation et gratuite . Il propose des outils pour le développement et le débogage de code C++, notamment pour l' API Windows , DirectX et .NET .
De nombreuses applications nécessitent des packages de bibliothèques d'exécution Visual C++ redistribuables pour fonctionner correctement. Ces packages sont souvent installés séparément des applications qu'ils prennent en charge, ce qui permet à plusieurs applications d'utiliser le package avec une seule installation. Ces packages redistribuables et d'exécution Visual C++ sont principalement installés pour les bibliothèques standard utilisées par de nombreuses applications.
Histoire
Le prédécesseur de Visual C++ s'appelait Microsoft C/C++ . Il existait également Microsoft QuickC 2.5 et Microsoft QuickC pour Windows 1.0. Le compilateur Visual C++ est toujours connu sous le nom de Microsoft C/C++ et, depuis la sortie de Visual C++ 2015 Update 2, il est en version 14.0.23918.0.
Versions 16 bits
- Ko).
- La version C 5.1, sortie en 1988, permettait de compiler des programmes pour OS/2 1.x. La version sur quatorze disquettes 5,25 pouces (dont deux de 1,2 Mo et les autres de 360 Ko) incluait QuickC. La version sur onze disquettes 3,5 pouces de 720 Ko, fournie avec le kit de développement logiciel OS/2, incluait MASM 5.1 (un exécutable unique fonctionnant sous MS-DOS et OS/2 1.x).
- La version C 6.0, sortie en 1989, a introduit la prise en charge du modèle de mémoire Tiny et une meilleure compatibilité avec la norme ANSI C89 (la documentation précise qu'elle n'est pas entièrement conforme, mais qu'elle s'en approche suffisamment pour les applications pratiques). Elle a également intégré l'environnement de développement intégré Programmer's Workbench , l'analyse de flux global, un explorateur de code source et un nouveau débogueur. À la surprise générale, le C++ n'a pas été inclus, malgré la présence de solutions concurrentes.
- C/C++ 7.0 est sorti en 1992. La prise en charge d'OS/2 a été abandonnée. La compilation nécessitait un processeur 386 et l' extension DOS incluse , 386MAX [ Toutefois, pour que les utilisateurs puissent cibler les extensions DOS dans leurs propres programmes, un outil tiers, ceux publiés ultérieurement, était nécessaire . La prise en charge native de C++ et de MFC (Microsoft Foundation Class Library) 1.0 a été ajoutée
- Visual C++ 1.0 (nom d'origine : Visual C++ 32-bit Edition), sorti en 1993, était la première version destinée au développement 32 bits (nécessitant Windows NT 32 bits comme système d'exploitation hôte) pour l' architecture Intel 386. Bien que publié alors que la version 16 bits 1.5 était déjà disponible, il ne prenait pas en charge OLE2 et ODBC. Il était également disponible dans une suite logicielle appelée Visual C++ 16/32-bit Suite, qui incluait Visual C++ 1.5.
- Visual C++ 4.0, sorti le 11 décembre 1995 , a introduit l'environnement de développement intégré Developer Studio. Son agencement novateur en mosaïque de panneaux non superposés (panneau de navigation, panneau combinant éditeur et débogueur de code source, et panneau de sortie console est conservé dans toute la gamme de produits Visual Studio ( Visual C++ 4.0, incluant MFC 4.0, était conçu pour Windows 95 et Windows NT. Afin de permettre la prise en charge des projets antérieurs (Windows 3.x/DOS), la version 4.0 était fournie avec le CD d'installation de Visual C++ 1.52. Les mises à jour disponibles par abonnement comprenaient Visual C++ 4.1, fourni avec le kit de développement logiciel (SDK) Microsoft pour les jeux (publié ultérieurement séparément sous le nom de SDK DirectX), et Visual C++ 4.2. La version 3.0 a été omise afin d'assurer la parité des numéros de version entre Visual C++ 4.0 et MFC 4.0.
- Visual C++ 5.0 (fourni avec Visual Studio 97) qui incluait MFC 4.21 et a été publié le 28 avril 1997, constituait une mise à niveau majeure par rapport à la version 4.2. Disponible en quatre éditions : Apprentissage, Professionnel, Entreprise, et RISC.
- Visual C++ .NET 2002 (également connu sous le nom de Visual C++ 7.0), incluant MFC 7.0, a été publié en 2002. Il prenait en charge la génération de code à l'édition de liens et le débogage des vérifications d'exécution, .NET 1.0, ainsi que Visual C# et Managed C++ . La nouvelle interface utilisateur reprenait de nombreux raccourcis clavier et conventions de Visual Basic , ce qui explique en partie son impopularité auprès des développeurs C++. Numéro de version : 13.00.9466
- Visual C++ 2005 (également connu sous le nom de Visual C++ 8.0), incluant MFC 8.0, a été publié en novembre 2005. Cette version prend en charge .NET 2.0 et intègre une nouvelle version de C++ dédiée au framework .NET ( C++/CLI ), remplaçant ainsi la version précédente ( Managed C++ ). Le Managed C++ pour CLI reste toutefois disponible via les options du compilateur. Visual C++ 2005 a également introduit OpenMP . Avec Visual C++ 2005, Microsoft a aussi lancé Team Foundation Server . Visual C++ 8.0 rencontre des problèmes de compilation avec les projets MFC AppWizard créés avec Visual Studio 6.0 ; la maintenance des projets existants peut donc être poursuivie avec l’EDI d’origine si la réécriture n’est pas envisageable. Visual C++ 2005 est la dernière version compatible avec Windows 98 et Windows Me . La version SP1 (14.00.50727.762) est également disponible dans la mise à jour du SDK Microsoft Windows pour Windows Vista .
- Visual C++ 2010 (également connu sous le nom de Visual C++ 10.0) a été publié le 12 avril 2010. Il utilise une base de données SQL Server Compact pour stocker les informations relatives au code source, notamment les informations IntelliSense , afin d'améliorer la prise en charge d'IntelliSense et de la complétion de code. Cependant, Visual C++ 2010 ne prend pas en charge IntelliSense pour C++/CLI. Cette version ajoute une bibliothèque de calcul parallèle C++ appelée Parallel Patterns Library , une prise en charge partielle de C++11 , une fonctionnalité IntelliSense considérablement améliorée grâce à l' interface d'Edison Design Group , et des améliorations de performances tant pour le compilateur que pour le code généré. Cette version est basée sur .NET 4.0, mais prend en charge la compilation en code machine . La prise en charge partielle de C++11 se compose principalement de six fonctionnalités du compilateur : les expressions lambda, les références rvalue, auto, decltype, static_assert et nullptr. C++11 prend également en charge les fonctionnalités de bibliothèque (par exemple, le déplacement des composants TR1 de l'espace de noms `std::tr1` directement vers l'espace de noms `std`). Les modèles variadiques ont également été envisagés, mais leur implémentation a été reportée à une version ultérieure en raison de leur faible priorité. En effet, contrairement à d'autres fonctionnalités coûteuses à implémenter (comme les lambdas et les références rvalue), les modèles variadiques ne profiteraient qu'à une minorité de développeurs de bibliothèques, et non à la majorité des utilisateurs finaux du compilateur. Par défaut, toutes les applications compilées avec Visual C++ 2010 Runtimes fonctionnent uniquement sous Windows XP SP2 et versions ultérieures. La version RTM (16.00.30319) est également disponible dans le SDK Windows pour Windows 7 et .NET Framework 4 (WinSDK v7.1). La version SP1 (16.00.40219) est disponible dans le cadre du Service Pack 1 de Visual Studio 2010 ou via la mise à jour du compilateur Microsoft Visual C++ 2010 Service Pack 1 pour le SDK Windows 7.1.
- Visual C++ 2013 (également connu sous le nom de Visual C++ 12.0) a été publié le 17 octobre 2013. Il offre une prise en charge étendue de C++11 et C99 et introduit un SDK REST .
- Visual C++ 2017 (également connu sous le nom de Visual C++ 14.10) a été publié le 7 mars 2017.
- Visual C++ 2022 (également connu sous le nom de Visual C++ 14.30) a été publié le 8 novembre 2021.
- Visual C++ 2026 (également connu sous le nom de Visual C++ 14.50) a été publié le 11 novembre 2025.
Numérotation interne des versions
Plusieurs numéros de version sont à prendre en compte lors de l'utilisation de Visual C ou C++. Le plus ancien et le plus original est le numéro de version du compilateur, incrémenté de manière monotone depuis les débuts du compilateur Microsoft C. Il s'agit de la version renvoyée par la commande ` cl.exec` sans options. En conservant les deux chiffres après la virgule et en supprimant le point décimal, on obtient également la valeur de la macro du préprocesseur C : `c` _MSC_VER, et de la variable CMake : `c` MSVC_VERSION. Une version plus longue de la macro C permet _MSC_FULL_VERde distinguer plus précisément les différentes versions du compilateur. Par exemple, ` _MSC_VERc` vaut 1933 pour représenter la version 19.33 du compilateur Microsoft C/C++, et ` _MSC_FULL_VERc` vaut 193331630.
La version du produit Visual, par exemple « 17.3.4 », désigne la version de Visual Studio avec laquelle le compilateur version 19.33 a été intégré. On trouve ensuite la version de la bibliothèque d'exécution Microsoft Visual C/C++, par exemple « 14.3 ». À partir de là, on peut également déduire la version de l'ensemble d'outils, obtenue en prenant les trois premiers chiffres de la version de la bibliothèque d'exécution et en supprimant la partie décimale, par exemple « 143 ». Cet ensemble comprend la bibliothèque d'exécution Visual C/C++, ainsi que les compilateurs, les éditeurs de liens, les assembleurs, les autres outils de génération, et les bibliothèques et fichiers d'en-tête associés. Le tableau suivant (exploitable) répertorie les numéros de version associés.
Compatibilité
ABI
L' ABI du compilateur Visual C++ a historiquement évolué entre les versions majeures de ce dernier. C'est notamment le cas pour les conteneurs STL, dont la taille a considérablement varié d'une version à l'autre. Microsoft déconseille donc l'utilisation d'interfaces C++ aux limites des modules lorsqu'on souhaite permettre l'exécution de code client compilé avec une version différente du compilateur. À la place du C++, Microsoft recommande l'utilisation d'interfaces C ou COM , conçues pour garantir une ABI stable entre les versions du compilateur.
Toutes les versions 14.x de MSVC ont une ABI stable, et les binaires construits avec ces versions peuvent être mélangés de manière compatible avec les versions ultérieures, en tenant compte des restrictions suivantes :
- La version de l'ensemble d'outils utilisée doit être égale ou supérieure à la version la plus élevée de l'ensemble d'outils utilisée pour construire les binaires liés.
- La version du package redistribuable MSVC doit être égale ou supérieure à la version de l'ensemble d'outils utilisée par chaque composant de l'application.
- Les bibliothèques statiques ou les fichiers objets compilés avec /GL (optimisation du programme entier) ne sont pas compatibles au niveau binaire entre les versions et doivent utiliser exactement le même ensemble d'outils.
bibliothèques d'exécution C
Visual C++ est fourni avec différentes versions des bibliothèques d'exécution C. Cela signifie que les utilisateurs peuvent compiler leur code avec n'importe laquelle des bibliothèques disponibles. Cependant, cela peut engendrer des problèmes lors de l'utilisation de différents composants ( DLL , EXE ) dans un même programme. Un exemple typique est un programme utilisant différentes bibliothèques . L'utilisateur doit utiliser la même bibliothèque d'exécution C pour tous les composants du programme, sauf s'il comprend parfaitement les implications. Microsoft recommande d'utiliser la bibliothèque de liens dynamiques multithread (option de compilation /MD ou /MDd) afin d'éviter d'éventuels problèmes.
POSIX
Bien que la bibliothèque CRT de Microsoft implémente une grande partie des interfaces POSIX , le compilateur Visual C++ émet par défaut un avertissement à chaque utilisation de ces fonctions. Ceci s'explique par le fait que les normes C et C++ exigent un préfixe de soulignement avant les interfaces définies par l'implémentation ; l'utilisation de ces fonctions est donc non standard. Cependant, les systèmes réellement conformes à POSIX n'acceptent pas ces noms précédés d'un soulignement, et il est plus portable de simplement désactiver l'avertissement.
C
Bien que le produit ait été initialement conçu comme un environnement de développement intégré (IDE) pour le langage de programmation C , pendant de nombreuses années, la prise en charge de ce langage par le compilateur s'est limitée à la version originale de la norme C , datant de 1989, et non à la révision C99 . Aucune prise en charge de la norme C99 n'était prévue, même en 2011, plus de dix ans après sa publication.
Visual C++ 2013 a finalement intégré la prise en charge de diverses fonctionnalités C99 dans son mode C (notamment les initialiseurs désignés, les littéraux composés et le _Booltype), bien que cette prise en charge ne soit pas encore complète. Visual C++ 2015 a encore amélioré la prise en charge de C99, avec une prise en charge complète de la bibliothèque standard C99, à l'exception des fonctionnalités nécessitant des éléments du langage C99 non encore pris en charge par le compilateur.
La plupart des modifications apportées par la révision C11 de la norme n'étaient toujours pas prises en charge par Visual C++ 2017. Par exemple, les sélections génériques via le _Genericmot-clé ne sont pas prises en charge par le compilateur et entraînent une erreur de syntaxe.
Le préprocesseur a été remanié en 2018, avec C11 en vue :
La conformité totale à la norme C11 figure dans notre feuille de route, et la mise à jour du préprocesseur n'en est que la première étape. La
_Genericfonctionnalité C11 n'est pas encore intégrée au préprocesseur et n'a donc pas encore été implémentée. Une fois implémentée, elle devrait fonctionner indépendamment de l'utilisation de la logique de préprocesseur traditionnelle ou mise à jour.
_GenericUn soutien a été engagé envers MSVC à compter de février 2020.
En septembre 2020, Microsoft a annoncé que la prise en charge des normes C11 et C17 dans MSVC serait disponible à partir de la version 16.8. Cette version n'incluait pas les fonctionnalités optionnelles, mais Microsoft a indiqué son intention d'ajouter la prise en charge des opérations atomiques et des threads ultérieurement. Dans la version 17.5, une prise en charge partielle (en raison de l' absence de verrous atomiques ) et expérimentale (c'est-à-dire masquée par une option du compilateur /experimental:c11atomics) des opérations atomiques a été ajoutée Enfin, dans la version 17.8, la prise en charge des threads a été ajoutée, cette fois sans option du compilateur.
C++
Avec les paramètres par défaut, MSVC n'effectue pas de recherche de nom en deux phases, ce qui l'empêche de signaler un grand nombre de codes invalides. La plupart des vérifications sont reportées à l'instanciation du modèle. Les versions plus récentes corrigent ce comportement, mais cette option doit être activée en ligne de commande /permissive-.
Réception
Qualifiant le langage de programmation C 5.1 d’« excellent », BYTE approuvait en février 1989 la prise en charge d’OS/2, QuickC pour le développement interactif et le débogueur CodeView de Microsoft C 5.1. Bien que Watcom C produise un code légèrement plus rapide, le magazine estimait que les développeurs « pourraient encore préférer les outils plus conviviaux et plus puissants de Microsoft ».
- Johnson, Brian (8 août 2004). « Création d'applications Win32 avec Visual C++ 2005 Express » . Blog de Brian Johnson, développeur de startups . Microsoft – via les archives de Microsoft Docs.
- Springfield, Jim (25 septembre 2015). « Redévelopper le compilateur Microsoft C/C++ » . Blog de l'équipe C++ . Microsoft.