# Visual C++

Microsoft Visual C++ (Abkürzung: MSVC) ist ein Compiler des Unternehmens Microsoft zur Entwicklung von Software in der Programmiersprache C++ unter dem Betriebssystem Windows und anderen Betriebssystemen von Microsoft.
Aktuelle Versionen von Visual C++ verfügen über den erweiterten C++-Befehlssatz C++/CLI, der unter anderem die Nutzung der .Net-Framework-Programmierung vereinfachen soll.
Visual C++ Produkte wurden als grafische Entwicklungswerkzeuge konzipiert und werden daher meist zusammen mit einer Entwicklungsumgebung ausgeliefert. Diese war anfangs auf die reine C++ Entwicklung ausgelegt und unterschied sich von anderen IDEs wie jenen von Visual Basic oder Java.
Durch die .NET Strategie wurden mit Visual Studio 2002 alle unterstützten Sprachen (C++, C#, VB.NET) in einer einzigen grafischen Entwicklungsumgebung zusammengefasst. Visual C++ ist seither ein Bestandteil von Visual Studio.

## Verfügbarkeit

Alle Visual Studio Professional und Visual Studio Enterprise Produkte enthalten seit ihrer Einführung eine vollständige Visual C++ Umgebung mit allen Plattform-Toolsets und den aktuellen Bibliotheksversionen von MFC, ATL und weiteren Programmierschnittstellen für den Unternehmensbereich.
Von Version 2005 bis 2010 war Visual C++ als kostenlose separate Express Edition mit eigener eingeschränkter IDE aber ohne die anderen Visual Studio Sprachen verfügbar. Für weitere Sprachen wurden eigene Express-Produkte angeboten, wie z. B.: Visual C# Express, Visual Basic Express oder Visual J# Express.
Von 2012 bis 2017 existierte Visual C++ innerhalb von Visual Studio Express für Desktop neben C# und Visual Basic in einer ebenfalls eingeschränkten Umgebung.
Das separat kostenlos herunterladbare Windows Platform SDK (heute Windows SDK genannt) ist ebenfalls mit einem Visual C++ Compiler ausgestattet, dem jedoch eine grafische Entwicklungsumgebung fehlt.
Ab 2013 starteten mit Visual Studio Community und den Build Tools für Visual Studio zwei weitere Produktserien, die Visual C++ bereitstellen. Die Community Edition löste die Express Editionen als kostenlose grafische Umgebungen ab, während die Build Tools nur die Compiler Toolsets ohne grafische Werkzeuge installierten um für automatische Build-Prozesse eingesetzt zu werden, wie z. B.: in Docker Containern.
Die aktuelle Version von Visual C++ ist Bestandteil der Entwicklungsumgebung Microsoft Visual Studio 2022. Sie ist in den kostenpflichtigen Varianten Professional, Enterprise und Test Professional erhältlich und kostenfrei als Community Edition oder über die Build Tools für Visual Studio beziehbar.

## Vermarktung

Aus Marketinggründen trugen die Versionen 2002 und 2003 das Kürzel .NET als Zusatz im Namen. 2005 kam Microsoft von diesem Benennungsschema wieder ab.
Die kostenpflichtigen Professional und Enterprise Editionen von Visual Studio richten sich an professionelle Entwickler und Unternehmen für die Herstellung von kommerzieller Software. Sie enthalten zahlreiche Vorlagen für verschiedene Visual C++ basierte Projekte und sind durch Plugins beliebig erweiterbar. Bei Problemen können Entwickler den technischen Support von Microsoft in Anspruch nehmen.
Die kostenlosen Visual C++ Express Editionen waren für den Einstieg in die Programmierung und kleine Projekte vorgesehen. Deren Entwicklungsumgebungen waren stark eingeschränkt und die installierten Compiler Toolsets deckten weniger Plattformen als die kostenpflichtigen Varianten ab (z. B.: anfangs nur Win32, später zusätzlich Win64). Auch fehlten Bibliotheken für die WinAPI Anbindung oder MFC und ATL. Diese wurden jedoch in späteren Editionen teilweise ergänzt. Der Einsatz von Express Editionen für die Schaffung kommerzielle Produkte ist nicht untersagt. Ein Umstieg von den Express zu den Professional und Enterprise Editionen war jederzeit möglich, da kompatible Dateiformate benutzt wurden.
Mit Visual Studio Community wurde ein Großteil aller vorher nur kostenpflichtig erhältlichen Funktionen freigegeben. Die Community Lizenz gestattet die Arbeit an privaten, gemeinnützigen und Open-Source-Projekten, schließt aber die kommerzielle Nutzung in Unternehmen ab einem bestimmten Umsatz aus. Die somit freie Verfügbarkeit von Visual C++ trug zur Verbreitung des Compiler bei ohne das Geschäftsmodell der kostenpflichtigen Produkte zu beeinträchtigen.

## Versionsgeschichte

Die Version 1.0 von Visual C++ erschien 1993 für Windows 3.1. Sie war als Nachfolger von Microsoft C/C++ für DOS vorgesehen. Version 2.0 von 1994 sollte als erste reine 32-Bit-Version den Umstieg auf Windows 9x vorbereiten. Version 4.0 führte die neue Integrierte Entwicklungsumgebung Developer Studio ein.
Die Versionen ab 2002 sind in der Lage, außer der MFC noch auf .NET basierende Projekte zu erstellen. Die ursprünglich „Managed C++“ genannten Spracherweiterungen wurden stark überarbeitet und stehen ab Version 2005 von Visual C++ als C++/CLI zur Verfügung.
Seit 2012 ist die Entwicklung von Window Store Apps möglich, die nicht auf dem Win32-API, sondern auf der neuen Windows Runtime Schnittstelle aufbauen. Ab 2015 werden alle neuen API Modelle durch die Universal Windows Platform zusammengefasst, die ebenfalls durch Visual C++ programmiert werden kann. Eine Spracherweiterung namens C++/CX ermöglicht hierbei den einfachen Zugang zu Windows Runtime Funktionen. Alternativ kann über die Windows Runtime C++ Template Library (WRL) mit Standard-C++ ebenso auf die Windows Runtime Umgebung zugegriffen werden.
Seit Version 2022 werden nur noch 64-Bit-Versionen von Visual Studio veröffentlicht. Neu hinzugekommen ist die native Unterstützung von ARM64 als Hostplattform für Visual Studio unter Windows 11, in der nativer C++ Code auf ARM64 Hardware entwickelt und ausgeführt werden kann. (Debugging von ARM32 und ARM64 Code war zuvor nur per Remote-Debugger von einem x86-Studio aus möglich). Mit dem zusätzlichen ARM64EC Binärstandard ab Visual Studio 2022 17.4 steht eine Brückentechnologie zwischen x86-64 und ARM64 bereit, die der Softwaremigration von X86 hin zur ARM Plattform dienen soll.

### Compiler Versionierung

Die Visual C++ Versionierung liegt in bis zu 3 unterschiedlichen Varianten vor:
* Version der Visual Studio Produktserie, in der der Compiler enthalten ist. Sie ist seit dem Jahr 2002 dem Jahr der Veröffentlichung angenähert (z. B.: Visual Studio / Visual C++ 2003)
* Versionsnummer des Compilers, die als Haupt- und Nebenversion hochgezählt wird (z. B.: MSVC-7.1)
* _MSC_VER Versionsmakro als hochgezählte Ganzzahl, die innerhalb von C/C++ Codes benutzt werden kann, um den Compiler zu erkennen und neue Funktionen einzubinden. Visual C++ 1.0 beginnt bei _MSC_VER 800 als Nachfolger von Microsoft C/C++ 7.0 mit einer _MSC_VER von 700.
| Titel | Version | _MSC_VER | Datum | Neue Funktionen |
| Visual C++ 1.0 | 1.0 | 800 | Februar 1993 | erste Version, für Microsoft Windows 3.1, in der Professional-Version auch für DOS. Die Standard-Version ersetzte QuickC for Windows 1.0. Die Professional-Version ersetzte Microsoft C/C++ 7.0. |
| Visual C++ 1.0 32-Bit-Edition | 1.0 | 800 | August 1993 | für Microsoft Windows NT 3.1, nur für x86 |
| Visual C++ 1.5 | 1.5 | 800 | Dezember 1993 | letzte Version, die selber unter Microsoft Windows 3.1 lauffähig ist und 16-Bit-Programme erzeugen kann |
| Visual C++ 2.0 | 2.0 | 900 | Oktober 1994 | für Microsoft Windows NT 3.5 (unterstützt x86, MIPS und Alpha-Prozessoren), MFC 3.0, unterstützt Windows 3.x nur noch via Win32s, erste Version für Macintosh (nur Motorola-68000-Prozessoren) |
| Visual C++ 4.0 | 4.0 | 1000 | September 1995 | für Microsoft Windows NT 3.51 und erstmals Microsoft Windows 95, MFC 4.0, neue Integrierte Entwicklungsumgebung Developer Studio, erste Version für PowerPC-Prozessoren, enthielt auch eine CD mit Visual C++ 1.52 für 16-Bit-Rückwärtskompatibilität. Die Standard-Version enthält vergleichbar zu QuickC keinen optimierenden Compiler. |
| Visual C++ 4.1 | 4.1 | 1010 | | für Microsoft Windows NT 3.51 und Microsoft Windows 95, erste Version mit Microsoft Game SDK (später umbenannt in DirectX), letzte Version mit Unterstützung für MIPS-Prozessoren und Win32s, nur als Update für MSDN-Abonnenten erhältlich gewesen |
| Visual C++ 4.2 | 4.2 | 1020 | September 1996 | für Microsoft Windows NT 4.0 und Microsoft Windows 95, MFC 4.2 mit Unterstützung für ActiveX, letzte Version mit Unterstützung für Macintosh und für PowerPC-Prozessoren |
| Visual C++ 5.0 | 5.0 | 1100 | April 1997 | für Microsoft Windows NT 4.0 und Microsoft Windows 95, modernisierte Entwicklungsumgebung, MFC 4.21 |
| Visual C++ 6.0 | 6.0 | 1200 | Dezember 1998 | für Microsoft Windows NT 4.0 und Microsoft Windows 98 sowie das kommende Windows 2000, MFC 6.0, letzte Version für Alpha-Prozessoren |
| Visual C++ .NET 2002 | 7.0 | 1300 | 2002 | für Microsoft Windows XP, erstmalige Unterstützung für .NET-Projekte (1.0), Managed C++ |
| Visual C++ .NET 2003 | 7.1 | 1310 | 2003 | Verbesserte C++03 Unterstützung, .NET 1.1 |
| Visual C++ 2005 | 8.0 | 1400 | November 2005 | C++/CLI, .NET 2.0 |
| Visual C++ 2008 | 9.0 | 1500 | November 2007 | für Microsoft Windows Vista, .NET 3.5, SP1 beinhaltet TR1 (Vorschau auf C++11 Bibiliotheksfunktionen) |
| Visual C++ 2010 | 10.0 | 1600 | April 2010 | für Microsoft Windows 7, .NET 4.0, teilweise C++11 Unterstützung, verbessertes C++ Parsing für IntelliSense |
| Visual C++ 2012 | 11.0 | 1700 | April 2012 | für Microsoft Windows 8, .NET 4.5, App-Store Unterstützung, verbesserte C++11 Unterstützung |
| Visual C++ 2013 | 12.0 | 1800 | Oktober 2013 | für Microsoft Windows 8.1, .NET 4.5.1, erstmals C99 Unterstützung, weiter verbesserte C++11 Unterstützung |
| Visual C++ 2015 | 14.00 | 1900 | Juli 2015 | für Microsoft Windows 10, Android und iOS als Zielplattformen, C++14 Unterstützung, einige C++17 Features |
| Visual C++ 2017 | 14.10 | 1910 | März 2017 | für Microsoft Windows 10, .NET Core, C++17 Unterstützung, teilweise C11 Unterstützung |
| Visual C++ 2019 | 14.20 | 1920 | April 2019 | für Microsoft Windows 10, teilweise C++20 Unterstützung, CMake Integration, teilweise C11 und C17 Unterstützung |
| Visual C++ 2022 | 14.30 | 1930 | November 2021 | für Microsoft Windows 11, erstmals nur für 64-Bit-Hosts verfügbar, mit Version 17.4 wurde die erste native ARM64-Variante für Windows 11 ARM64 veröffentlicht. |
Ab Visual Studio 2015 v14.0 wird das Visual C++ Compiler-Toolset im Verhältnis zur Visual Studio Version unterschiedlich hochgezählt. Während die Studio Hauptversion erhöht wird und die Nebenversion Updates abbildet, ist die Hauptversion des C++ Toolsets aktuell auf 14 festgesetzt und die Nebenversion bildet in Zehnerschritten die Hauptversion des Studio Produktes ab.
Eine neuere Version von Visual Studio kann mit älteren Versionen des Toolsets betrieben werden.
Beispiel: Studio 2022 v17 Projekt kompiliert mit Toolset 14.10 (von Studio 2017 v15).
| Titel | Studio Version | C++ Toolset Version | _MSC_VER |
| Visual Studio 2015 | 14.x | 14.0x | >= 1900 |
| Visual Studio 2017 | 15.x | 14.1x | >= 1910 |
| Visual Studio 2019 | 16.x | 14.2x | >= 1920 |
| Visual Studio 2022 | <=17.9.x | 14.3x | >= 1930 |
| Visual Studio 2022 | >=17.10.x | 14.4x | >= 1940 |

## C und C++ Standard Unterstützung

Die vollständige Unterstützung der einzelnen C++ Standards ist nicht eindeutig an die Jahreszahlen der Produktveröffentlichungen von Visual C++ gebunden.
Eine Visual C++ Compilerversion kann bereits Entwürfe von Funktionen beinhalten, die erst später in einem C++ Standard veröffentlicht werden (z. B.: VC++ 2010 enthielt bereits einige C++11 Features). Parallel dazu werden manche Funktionen erst spät (teilweise erst nach vielen Jahren) oder gar nicht implementiert.
Visual C++ unterstützte bis zur Version 2012 (v11) nur den originalen C90 Standard, wodurch viele modernere C-Projekte (Dateiendung .c) nicht übersetzt werden konnten. Mit Visual C++ 2013 (v12) kam erstmals C99 Support hinzu und seit Visual C++ 2017 (v14.1) wird schrittweise der C11 und C17 Support ausgebaut.

## Unterstützte C++ Zielplattformen

* Windows Desktop Apps und Konsolendienste (x86-32, x86-64, ARM-32, ARM-64)
* Windows Universal Apps (x86-32, x86-64, ARM-32, ARM-64)
* Windows Driver (x86-32, x86-64, ARM-32, ARM-64)
* Windows CE (x86, ARM und weitere)
* .NET CLI (Unmanaged-, Pure- und Safe-Mode)
* Microsoft-POSIX (Optionale Unix Dienste ab Windows NT 4, nur bis einschließlich Windows 8 verfügbar)
* UEFI ROM, Runtime, Boot, Applications (x86-32, x86-64, ARM-32, ARM-64)
* Android (Visual Studio Cross-Platform Module auf x86 und ARM-32, ARM-64)
* iOS (Visual Studio Cross-Platform Module)