Die Microsoft C/C++ Compiler haben schon immer eine durchgängige Versionsnummer, die mit den Produkten in denen sie eingebunden sind (z.B. VS-2010) nicht zu tun hat.
Diese Produktversion spiegelt auch auch in der vordefinierten Compiler Präprozessor Variable _MSC_VER wieder. Über diese Variable ist es zum Beispiel möglich verschiedene CRT oder STL Library Eigenarten abzufragen und entsprechen den eigenen Code für mehrere Compiler lauffähig zu machen. Gleiches gilt natürlich auch für den Code der MFC (siehe Anmerkung am Fuß der Tabelle).
Hier eine kleine Tabelle der Werte, die _MSC_VER für die verschiedenen Compiler annimmt mit ein paar zusätzlichen Hinweisen.
_MSC_VER = Compiler 510 = C Compiler 5.1 (DOS) - 1988? Mein aller erster Kontakt mit dem MS-Compiler 600 = C Compiler 6.x (DOS) - 1990? 700 = C/C++ 7.0 - 1992 Die UI war damals die PWB. MFC 1.0 wurde veröffentlicht 800 = Visual C++ 1.0 - 1993 Existierte IMHO als 16bit und 32bit Compiler 900 = Visual C++ 2.0 Existierte IMHO als 16bit und 32bit Compiler. MFC 3.0 1000 = Visual C++ 4.0 - 1995-03 ? Ab dieser Verison nur noch 32bit Compiler. MFC 4.0 ???? = Visual C++ 4.1 War nur für MSDN Subscriber verfügbar. Kam mit erstem Game/DirectX SDK. ???? = Visual C++ 4.2 und 4.21 Erste Cross-Platform Version für Mac und PC. MFC 4.2, 4.21 1100 = Visual Studio 97 (5.0) - 1997 Enthielt weiterhin MFC 4.21 1200 = Visual C++ 6.0 - 1998-06 Populärtse VC Version. MFC 6.0 1300 = Visual Studio.NET (2002) - 2002-02-13 .NET hält Einzug. MFC 7.0 1310 = Visual Studio.NET 2003 - 2003-04-24 MFC 7.1 1400 = Visual Studio 2005 - 2005-11-07 MFC 8.0 1500 = Visual Studio 2008 - 2007-11-19 MFC 9.0 1600 = Visual Studio 2010 - 2010-04-10 MFC 10.0 1700 = Visual C++ 2011 - 2011 ??? Produktname noch offen evtl. WinC++
Noch ein Hinweis auf _MFC_VER:
In der Tabelle habe ich nur die Versionen der zum Compiler passenden MFC Versionen aufgeführt. Die MFC setzt einen Define mit dem Namen _MFC_VER entsprechend. Dieser definiert ein WORD im Format 0xVVRR. Wobei VV für die Version der MFC steht in hexadezimaler schreibweise und RR für die Revision allerdings in dezimaler Schreibweise. Die aktuelle _MFC_VER von VS-2010 hat also den Wert 0x0A00 und in der MFC 4.21 wurde _MFC_VER als 0x0421 definiert.
PS: Auf die Idee für diese Tabelle kam ich durch eine Diskussion mit einem Teilnehmer auf der ADC für C++ in Prien, der auch schon x-Jahre mit dem MS-Compiler verbracht hat wie ich, und wir über die Entwicklung der Sprache C/C++ nachgedacht haben und was wann als Innovation unsere Programme veränderte. Eben ein typisches Bits+Bytes Gespräch… 😉
Ich habe da noch ein paar Zahlen für Dich. 😉
VC 1.5 – 07.10.1993 (16-bit und DOS)
VC 2.0 – 27.08.1994 (nur 32-bit)
VC 4.0 – 28.09.1995
VC 4.1 – 16.02.1996 – 1010 (letzte Version für Win32s)
VC 4.2 – 14.06.1996 – 1020
VC 5.0 – 23.01.1997
VC 6.0 – 17.06.1998
VC 7.0 – 05.01.2002
VC 7.1 – 19.03.2003
VC 8.0 – 23.09.2005
VC 9.0 – 07.11.2007
VC 10.0 – 18.03.2010
Das Datum ist jeweils der vom Linker erzeugte Zeitstempel in der cl.exe und gibt an, wann die cl.exe erstellt wurde.
Bei mir ging es mit Visual C++ 2.0 los. Damals war ich eigentlich ein Borland-Kind, aber mit dem Start von Windows 95 konnte Borland noch keinen 32-bit Compiler liefern. So kam dann der Schwenk zu den Microsoft-Compilern. Angesichts der späteren Borland-Entwicklung habe ich diesen auch nie bereut.
Dein letzter Eintrag (Visual C++ 2011) verwirrt mich etwas. Weißt Du da schon etwas, was wir noch nicht wissen? 🙂
@Sven:
Vielleicht weiß ich was 😉
Aber lies mal aufmerksam diesen Bug und den Post von Stephan in dem er den Bug bestätigt. Gleich am Anfang:
https://connect.microsoft.com/VisualStudio/feedback/details/648543/tr1-regex-doesnt-match-a-valid-pattern-with-repetition
Da diese Info offen ist verate ich damit ja nicht geheimes.
Ansonsten danke für Deine Zahlen und Daten. Vielleicht ändere ich die Tabelle demnächst noch mal!
Ok, dann weißt Du also was. 😉
Der Antwort von Stephan entnehme ich nämlich nur, dass der Fehler in der nächsten Compilerversion behoben ist. Ohne weiteres Hintergrundwissen würde ich vermuten, dass diese wie üblich in das nächste Visual Studio (2012) einfließen wird. Aber lassen wir uns überraschen. 🙂
Lies genau. Stephan schreibt von „VC11“!
Er schreibt gleichzeitig aber auch von VC10 RTM. Imho meint er damit nur das Toolset.