Microsoft Visual C++ - Microsoft Visual C++

Visual C++
Visual Studio-Symbol 2019.svg
Entwickler Microsoft
Erstveröffentlichung Februar 1993 ; Vor 28 Jahren ( 1993-02 )
Stabile Version
14.29.30133 / 27. Juli 2021
Geschrieben in C++
Betriebssystem Fenster
Plattform IA-32 , x86-64 und ARM
Verfügbar in Englisch, Chinesisch (vereinfacht und traditionell), Tschechisch, Französisch, Deutsch, Italienisch, Japanisch, Koreanisch, Polnisch, Portugiesisch (Brasilien), Russisch, Spanisch, Türkisch
Typ IDE
Lizenz Test- und Freeware
Webseite docs .microsoft .com /en-us /cpp /

Microsoft Visual C++ ( MSVC ) ist ein Compiler für die Programmiersprachen C , C++ und C++/CX von Microsoft . MSVC ist proprietäre Software ; Es war ursprünglich ein eigenständiges Produkt, wurde aber später Teil von Visual Studio und sowohl als Trialware als auch als Freeware verfügbar gemacht . Es bietet Tools zum Entwickeln und Debuggen von C++-Code, insbesondere Code, der für die Windows-API , DirectX und .NET geschrieben wurde .

Für viele Anwendungen sind verteilbare Visual C++-Laufzeitbibliothekspakete erforderlich, um ordnungsgemäß zu funktionieren. Diese Pakete werden oft unabhängig von Anwendungen installiert, sodass mehrere Anwendungen das Paket verwenden können, während sie es nur einmal installieren müssen. Diese Visual C ++ verteilbare und Runtime - Pakete sind meist für Standard installiert Bibliotheken , dass viele Anwendungen nutzen.

Geschichte

Der Vorgänger von Visual C++ hieß Microsoft C/C++ . Es gab auch ein Microsoft QuickC 2.5 und ein Microsoft QuickC für Windows 1.0. Der Visual C++- Compiler ist immer noch als Microsoft C/C++ bekannt und befindet sich seit der Veröffentlichung von Visual C++ 2015 Update 2 in der Version 14.0.23918.0.

16-Bit-Versionen

  • Microsoft C 1.0, basierend auf Lattice C , war Microsofts erstes C - Produkt im Jahr 1983. Es war nicht K & R C .
  • C 2.0 fügte Unterstützung für große Modelle hinzu.
  • C 3.0 war die erste von Microsoft entwickelte Version. Diese Version beabsichtigte die Kompatibilität mit K&R und dem späteren ANSI-Standard. Es wurde Anfang 1984 innerhalb von Microsoft (für die Windows- und Xenix- Entwicklung) verwendet. Es wurde 1985 als Produkt ausgeliefert.
  • C 4.0 hat Optimierungen und CodeView , einen Debugger auf Quellebene , hinzugefügt .
  • C 5.0 fügte Schleifenoptimierungen und Unterstützung für 'große Speichermodelle' ( Arrays größer als 64 KB) hinzu. An diesem Projekt waren auch Microsoft Fortran und der erste 32-Bit-Compiler für 80386 beteiligt.
  • C 5.1, das 1988 veröffentlicht wurde, erlaubte das Kompilieren von Programmen für OS/2 1.x.
  • C 6.0 wurde 1989 veröffentlicht. Es fügte die Programmer's Workbench IDE, globale Flussanalyse, einen Quellbrowser und einen neuen Debugger hinzu und enthielt ein optionales C++- Frontend.
  • C/C++ 7.0 wurde 1992 veröffentlicht. Integrierte Unterstützung für C++ und MFC (Microsoft Foundation Class Library) 1.0 hinzugefügt .
  • Visual C++ 1.0, das MFC 2.0 enthielt, war die erste Version von 'Visual' C++, die im Februar 1993 veröffentlicht wurde. Sie war Cfront 2.1-kompatibel und in zwei Editionen erhältlich:
    • Standard: QuickC für Windows ersetzt.
    • Professional: ersetzt C/C++ 7.0. Inklusive der Fähigkeit , sowohl DOS und Windows - Anwendungen zu erstellen, einen optimierenden Compiler , eine Quelle Profiler , und das Windows 3.1 SDK. Der Phar Lap 286 DOS Extender Lite war ebenfalls enthalten.
  • Visual C++ 1.5 wurde im Dezember 1993 veröffentlicht, enthielt MFC 2.5 und fügte MFC Unterstützung für OLE 2.0 und ODBC hinzu . Es war die erste Version von Visual C++, die nur auf CD-ROM erhältlich war .
    • Visual C++ 1.51 und 1.52 waren als Teil eines Abonnementdienstes verfügbar.
    • Visual C++ 1.52b ähnelt 1.52 aber enthält das Control Development Kit nicht.
    • Visual C++ 1.52c war eine gepatchte Version von 1.5. Es ist die letzte und wohl beliebteste Entwicklungsplattform für Microsoft Windows 3.x. Es ist über das Microsoft Developer Network verfügbar .

Streng 32-Bit-Versionen

  • Visual C++ 1.0 (ursprünglicher Name: Visual C++ 32-Bit Edition) war die erste Version für die 32-Bit- Entwicklung für die Intel 386- Architektur. Obwohl es veröffentlicht wurde, als 16-Bit- Version 1.5 verfügbar war, enthielt es keine Unterstützung für OLE2 und ODBC. Es war auch in einem Bundle namens Visual C++ 16/32-Bit Suite verfügbar, das Visual C++ 1.5 enthielt.
  • Visual C++ 2.0, das MFC 3.0 enthielt, war die erste nur 32-Bit-Version. In vielerlei Hinsicht war diese Version ihrer Zeit voraus, da Windows 95 , damals Codename "Chicago", noch nicht veröffentlicht wurde und Windows NT nur einen kleinen Marktanteil hatte. Microsoft hat Visual C++ 1.5 als Teil der 2.x-Versionen bis 2.1 aufgenommen und aktualisiert, die Visual C++ 1.52 enthielten, und sowohl die 16-Bit- als auch die 32-Bit-Version des Control Development Kit (CDK) waren enthalten. Visual C++ 2.x unterstützte auch die Entwicklung von Win32s . Es ist über das Microsoft Developer Network verfügbar . Es gab eine Visual C++ 2.0 RISC Edition für MIPS- und Alpha- Prozessoren sowie eine plattformübergreifende Edition für den Macintosh ( 68000 Befehlssatz).
    • Visual C++ 2.1 und 2.2 waren Updates für 2.0, die über ein Abonnement verfügbar waren.
  • Visual C++ 4.0, veröffentlicht am 11.12.1995, führte die Developer Studio IDE ein. Das damals neuartige, gekachelte Layout nicht überlappender Bedienfelder – Navigationsbereich, kombinierter Editor-/Quellcode-Debuggerbereich und Konsolenausgabebereich – wird in der Visual Studio- Produktlinie (ab 2019) fortgesetzt . Visual C++ 4.0 enthielt MFC 4.0, wurde für Windows 95 und Windows NT entwickelt. Um Unterstützung von Legacy-Projekten (Windows 3.x/DOS) zu ermöglichen, wurde 4.0 mit der Visual C++ 1.52-Installations-CD gebündelt. Zu den im Abonnement verfügbaren Updates gehörten Visual C++ 4.1, das mit dem Microsoft Game SDK (später separat als DirectX SDK veröffentlicht) und Visual C++ 4.2 geliefert wurde. Versionsnummer 3.0 wurde übersprungen, um Versionsnummernparität zwischen Visual C++ 4.0 und MFC 4.0 zu erreichen.
  • Visual C++ 4.2 unterstützte die Entwicklung von Windows 3.x ( Win32s ) nicht. Dies war die letzte Version mit einer plattformübergreifenden Edition für den Macintosh und unterschied sich von der 2.x-Version dadurch, dass sie auch die Kompilierung für den PowerPC- Befehlssatz ermöglichte.
  • Visual C++ 5.0, das MFC 4.21 enthielt und am 28.04.1997 veröffentlicht wurde, war eine wichtige Aktualisierung von 4.2. Erhältlich in vier Editionen: Learning, Professional, Enterprise und RISC.
  • Visual C++ 6.0 (allgemein bekannt als VC6), das MFC 6.0 enthielt, wurde 1998 veröffentlicht. Die Veröffentlichung war etwas umstritten, da es kein erwartetes Update für MFC enthielt. Visual C++ 6.0 ist immer noch sehr beliebt und wird häufig verwendet, um Legacy-Projekte zu verwalten. Allerdings gibt es bei dieser Version unter Windows XP insbesondere im Debugging-Modus Probleme (zB werden die Werte von statischen Variablen nicht angezeigt). Die Debugging-Probleme können mit einem Patch namens "Visual C++ 6.0 Processor Pack" behoben werden. Versionsnummer: 12.00.8804
  • Visual C++ .NET 2002 (auch bekannt als Visual C++ 7.0), das MFC 7.0 enthielt, wurde 2002 mit Unterstützung für die Link-Time-Code-Generierung und das Debugging von Laufzeitprüfungen, .NET 1.0 sowie Visual C# und Managed C++ veröffentlicht . Die neue Benutzeroberfläche verwendet viele der Hotkeys und Konventionen von Visual Basic , was für einen Teil ihrer Unbeliebtheit bei C++-Entwicklern verantwortlich ist. Versionsnummer: 13.00.9466
  • Visual C++ .NET 2003 (auch bekannt als Visual C++ 7.1), das MFC 7.1 enthielt, wurde 2003 zusammen mit .NET 1.1 veröffentlicht und war ein wichtiges Upgrade auf Visual C++ .NET 2002. Es galt als Patch für Visual C++ .NET 2002. Dementsprechend wurde die englischsprachige Upgrade-Version von Visual Studio .NET 2003 zu minimalen Kosten an Besitzer der englischsprachigen Version von Visual Studio .NET 2002 ausgeliefert. Dies war die letzte Version, die Windows 95 und NT 4.0 als Ziel unterstützte. Versionsnummer: 13.10.3077
  • Für einige Versionen des Betriebssystems Windows CE wurde eMbedded Visual C++ in verschiedenen Versionen verwendet . Anfänglich ersetzte es eine Entwicklungsumgebung, die aus Tools bestand, die Visual C++ 6.0 hinzugefügt wurden. eMbedded Visual C++ wurde als separate Entwicklungsumgebung durch Microsoft Visual Studio 2005 ersetzt .

32-Bit- und 64-Bit-Versionen

  • Visual C++ 2005 (auch bekannt als Visual C++ 8.0), das MFC 8.0 enthielt, wurde im November 2005 veröffentlicht. Diese Version unterstützt .NET 2.0 und enthält eine neue Version von C++ für das .NET-Framework ( C++/CLI ) mit dem Zweck die vorherige Version ( Managed C++ ) zu ersetzen . Managed C++ für CLI ist jedoch weiterhin über Compileroptionen verfügbar. Es führte auch OpenMP ein . Mit Visual C++ 2005 hat Microsoft auch Team Foundation Server eingeführt . Visual C++ 8.0 hat Probleme beim Kompilieren von MFC-AppWizard-Projekten, die mit Visual Studio 6.0 erstellt wurden, sodass die Wartung von Legacy-Projekten mit der ursprünglichen IDE fortgesetzt werden kann, wenn ein Umschreiben nicht möglich ist. Visual C++ 2005 ist die letzte Version, die für Windows 98 und Windows Me geeignet ist . Die SP1-Version (14.00.50727.762) ist auch im Microsoft Windows SDK-Update für Windows Vista verfügbar .
  • Visual C++ 2008 (auch bekannt als Visual C++ 9.0) wurde im November 2007 veröffentlicht. Diese Version unterstützt .NET 3.5. Managed C++ für CLI ist weiterhin über Compileroptionen verfügbar. Standardmäßig funktionieren alle Anwendungen, die mit den Visual C++ 2008 Runtimes kompiliert wurden (statische und dynamische Verknüpfungen), nur unter Windows 2000 und höher. Ein für VC9 veröffentlichtes Feature Pack, das später in SP1 enthalten ist, fügte Unterstützung für C++ TR1- Bibliothekserweiterungen hinzu. Die SP1-Version (15.00.30729.01) ist auch im Microsoft Windows SDK für Windows 7 verfügbar .
  • Einige Versionen von Visual C++ unterstützten Itanium 2 .
  • Visual C++ 2010 (auch bekannt als Visual C++ 10.0) wurde am 12. April 2010 veröffentlicht. Es verwendet eine SQL Server Compact- Datenbank zum Speichern von Informationen über den Quellcode, einschließlich IntelliSense- Informationen, um eine bessere IntelliSense- und Codevervollständigungsunterstützung zu erzielen. Visual C++ 2010 unterstützt jedoch Intellisense für C++/CLI nicht. Diese Version fügt eine C++-Parallel-Computing-Bibliothek namens Parallel Patterns Library , teilweise Unterstützung für C++11 , deutlich verbessertes IntelliSense basierend auf dem Frontend der Edison Design Group und Leistungsverbesserungen sowohl des Compilers als auch des generierten Codes hinzu. Diese Version basiert auf .NET 4.0, unterstützt jedoch das Kompilieren in Maschinencode . Die teilweise Unterstützung von C++11 besteht hauptsächlich aus sechs Compilerfunktionen: Lambdas, Rvalue-Referenzen, auto, decltype, static_assert und nullptr. C++11 unterstützt auch Bibliotheksfunktionen (zB Verschieben der TR1-Komponenten vom std::tr1-Namespace direkt in den std-Namespace). Variadic-Vorlagen wurden ebenfalls in Betracht gezogen, aber aufgrund einer niedrigeren Priorität auf eine zukünftige Version verschoben, was darauf zurückzuführen ist, dass im Gegensatz zu anderen kostspielig zu implementierenden Funktionen (Lambda, Rvalue-Referenzen) variadic-Vorlagen nur einer Minderheit der Bibliothek zugute kommen würden Autoren und nicht die Mehrheit der Compiler-Endbenutzer. Standardmäßig funktionieren alle Anwendungen, die mit Visual C++ 2010 Runtimes kompiliert wurden, nur unter Windows XP SP2 und höher. Die RTM-Version (16.00.30319) ist auch im Windows SDK für Windows 7 und .NET Framework 4 (WinSDK v7.1) verfügbar. SP1-Version (16.00.40219) ist als Teil von Visual Studio 2010 Service Pack 1 oder über das Microsoft Visual C++ 2010 Service Pack 1-Compiler-Update für das Windows SDK 7.1 verfügbar.
  • Visual C++ 2012 (auch bekannt als Visual C++ 11.0) wurde am 15. August 2012 veröffentlicht. Es bietet eine verbesserte C++11-Unterstützung und Unterstützung für die Windows-Runtime- Entwicklung.
  • Visual C++ 2013 (auch bekannt als Visual C++ 12.0) wurde am 17. Oktober 2013 veröffentlicht. Es bietet weitere Unterstützung für C++11 und C99 und führt ein REST SDK ein.
  • Visual C++ 2015 (auch bekannt als Visual C++ 14.0) wurde am 20. Juli 2015 veröffentlicht. Es bietet eine verbesserte C++11/14/17-Unterstützung. Ohne Ankündigung von Microsoft hat Visual Studio 2015 Update 2 damit begonnen, Telemetrieaufrufe in kompilierten Binärdateien zu generieren. Nachdem einige Benutzer Microsoft wegen dieses Problems kontaktiert hatten, sagte Microsoft, dass sie diese Telemetrieaufrufe beim Kompilieren mit dem zukünftigen Visual Studio 2015 Update 3 entfernen würden. Die fragliche Funktion wurde aus den statischen Visual C++ CRT-Bibliotheken in Visual Studio 2015 Update 3 entfernt.
  • Visual C++ 2017 (auch bekannt als Visual C++ 14.1) wurde am 7. März 2017 veröffentlicht.
  • Visual C++ 2019 (auch bekannt als Visual C++ 14.2) wurde am 2. April 2019 veröffentlicht.

Interne Versionsnummerierung

Das vordefinierte Makro _MSC_VERgibt die Haupt- und Nebenversionsnummern des Visual C++-Compilers an. Der Wert des Makros ist ein ganzzahliges Literal, bei dem die letzten beiden Ziffern die Nebenversionsnummer und die vorhergehenden Ziffern die Hauptversionsnummer angeben.

Ab Visual Studio 2017 _MSC_VERwird bei jedem Visual C++-Toolset-Update monoton inkrementiert . So ist zum Beispiel die Version von | 14.11, das mit Visual Studio 2017 Version 15.3.0 geliefert wird, legt _MSC_VERauf 1911. Microsoft empfiehlt die Verwendung des >=Operators, um den Wert von zu testen _MSC_VER.

Hier sind die Werte von _MSC_VERfür verschiedene Versionen von Visual C++:

MSC-Versionen
MSC-Version _MSC_VER
1.0 100
2.0 200
3.0 300
4.0 400
5.0 500
6.0 600
7,0 700
MSVC++-Versionen
MSVC++-Version _MSC_VER
1.0 800
2.0 900
4.0 1000 (Entwicklerstudio 4.0)
4.2 1020 (Entwicklerstudio 4.2)
5.0 1100 (Visual Studio 5.0)
6.0 1200 (Visual Studio 6.0)
7,0 1300 (VisualStudio 2002 7.0)
7.1 1310 (Visual Studio 2003 7.1)
8.0 1400 (Visual Studio 2005 8.0)
9,0 1500 (Visual Studio 2008 9.0)
10,0 1600 (Visuelles Studio 2010 10.0)
11,0 1700 (Visuelles Studio 2012 11,0)
12.0 1800 (Visuelles Studio 2013 12.0)
14,0 1900 (Bildstudio 2015 14.0)
14,1 1910 (Bildstudio 2017 15.0)
14.11 1911 (Bildstudio 2017 15.3)
14.12 1912 (Bildstudio 2017 15.5)
14.13 1913 (Visual Studio 2017-Version 15.6)
14.14 1914 (Visual Studio 2017-Version 15.7)
14.15 1915 (Visual Studio 2017-Version 15.8)
14.16 1916 (Visual Studio 2017-Version 15.9)
14.2 1920 (Visual Studio 2019-Version 16.0)
14.21 1921 (Visual Studio 2019-Version 16.1)
14.22 1922 (Visual Studio 2019 Version 16.2)
14.23 1923 (Visual Studio 2019 Version 16.3)
14.24 1924 (Visual Studio 2019-Version 16.4)
14.25 1925 (Visual Studio 2019-Version 16.5)
14.26 1926 (Visual Studio 2019 Version 16.6)
14.27 1927 (Visual Studio 2019-Version 16.7)
14.28 1928 (Visual Studio 2019 Version 16.8 + 16.9)
14.29 1929 (Visual Studio 2019 Version 16.10 + 16.11)


Diese Versionsnummern beziehen sich auf die Hauptversionsnummer der Visual C++-Compiler und -Bibliotheken, wie aus den Installationsverzeichnissen ersichtlich. Es bezieht sich nicht auf das Jahr im Namen der Visual Studio-Version. Eine ausführliche Liste ist verfügbar.

Beachten Sie, dass die ausführbare Version des C++-Compilers übereinstimmt _MSC_VERund sich von der Version des Visual C++-Produkts insgesamt unterscheidet. Beispielsweise meldet die in 14.22 (Visual Studio 2019 16.2.5) enthaltene cl.exe ihre Version als 19.22.27905, wenn sie ohne Argumente ausgeführt wird.

Es gibt auch einen _MSC_FULL_VERWert, der seit 1200 definiert ist, für zusätzliche Informationen über die Build-Nummer.

Kompatibilität

ABI

Die Visual C++-Compiler- ABI haben sich in der Vergangenheit zwischen den wichtigsten Compiler-Releases geändert. Dies ist insbesondere bei STL-Containern der Fall, bei denen die Containergrößen zwischen den Compiler-Releases stark variieren. Microsoft rät daher davon ab, C++-Schnittstellen an Modulgrenzen zu verwenden, wenn Clientcode aktiviert werden soll, der mit einer anderen Compilerversion kompiliert wurde. Anstelle von C++ empfiehlt Microsoft die Verwendung von C- oder COM- Schnittstellen, die so konzipiert sind, dass sie zwischen Compiler-Releases über eine stabile ABI verfügen.

Alle 14.x MSVC-Versionen verfügen über eine stabile ABI, und mit diesen Versionen erstellte Binärdateien können aufwärtskompatibel gemischt werden, wobei die folgenden Einschränkungen zu beachten sind:

  • Die verwendete Toolset-Version muss gleich oder höher als die höchste Toolset-Version sein, die zum Erstellen verknüpfter Binärdateien verwendet wird.
  • Die MSVC Redistributable-Version muss gleich oder höher als die Toolset-Version sein, die von einer beliebigen Anwendungskomponente verwendet wird.
  • Statische Bibliotheken oder Objektdateien, die mit /GL (Gesamtprogrammoptimierung) kompiliert wurden, sind zwischen Versionen nicht binärkompatibel und müssen genau das gleiche Toolset verwenden.

C-Laufzeitbibliotheken

Visual C++ wird mit verschiedenen Versionen von C-Laufzeitbibliotheken geliefert. Das bedeutet, dass Benutzer ihren Code mit jeder der verfügbaren Bibliotheken kompilieren können. Dies kann jedoch bei der Verwendung verschiedener Komponenten ( DLLs , EXEs ) im selben Programm zu Problemen führen . Ein typisches Beispiel ist ein Programm, das verschiedene Bibliotheken verwendet . Der Benutzer sollte für alle Komponenten des Programms dieselbe C-Laufzeit verwenden, es sei denn, die Auswirkungen werden verstanden. Microsoft empfiehlt die Verwendung der multithreaded , Dynamic Link Library (/MD- oder /MDd-Compileroption), um mögliche Probleme zu vermeiden.

POSIX

Obwohl die CRT von Microsoft einen großen Teil der POSIX- Schnittstellen implementiert, gibt der Visual C++-Compiler standardmäßig bei jeder Verwendung solcher Funktionen eine Warnung aus . Der Grund dafür ist, dass C- und C++-Standards einen Unterstrich-Präfix vor implementierungsdefinierten Schnittstellen erfordern, sodass die Verwendung dieser Funktionen nicht dem Standard entspricht. Systeme, die tatsächlich POSIX-kompatibel sind, würden diese unterstrichenen Namen jedoch nicht akzeptieren, und es ist tragbarer, die Warnung stattdessen einfach auszuschalten.

C

Obwohl das Produkt als IDE für die Programmiersprache C entstand , entsprach die Compiler-Unterstützung für diese Sprache viele Jahre lang nur der Originalausgabe des C-Standards aus dem Jahr 1989, nicht jedoch der C99- Revision des Standards. Auch im Jahr 2011, mehr als ein Jahrzehnt nach seiner Veröffentlichung, gab es keine Pläne, C99 zu unterstützen.

Visual C++ 2013 fügte endlich Unterstützung für verschiedene C99-Funktionen in seinem C-Modus hinzu (einschließlich bestimmter Initialisierer, zusammengesetzter Literale und des _BoolTyps), obwohl es noch nicht vollständig war. Visual C++ 2015 hat die C99-Unterstützung weiter verbessert, mit voller Unterstützung der C99-Standardbibliothek, mit Ausnahme von Features, die C99-Sprachfeatures erfordern, die noch nicht vom Compiler unterstützt werden.

Die meisten Änderungen aus der C11- Revision des Standards werden von Visual C++ 2017 immer noch nicht unterstützt. Beispielsweise werden generische Auswahlen über das _GenericSchlüsselwort vom Compiler nicht unterstützt und führen zu einem Syntaxfehler.

Der Präprozessor wurde 2018 überholt, mit C11 in Sicht:

Die vollständige C11-Konformität steht auf unserer Roadmap, und die Aktualisierung des Präprozessors ist nur der erste Schritt in diesem Prozess. Die C11- _GenericFunktion ist eigentlich nicht Teil des Präprozessors und wurde daher noch nicht implementiert. Bei der Implementierung erwarte ich, dass die Funktion unabhängig davon funktioniert, ob die traditionelle oder aktualisierte Präprozessorlogik verwendet wird.

_Generic Support wurde MSVC seit Februar 2020 zugesagt, es ist nicht klar, wann er ausgeliefert wird.

Im September 2020 kündigte Microsoft die Unterstützung der C11- und C17-Standards in MSVC an.

Verweise

Weiterlesen

Externe Links