_MSC_VER, _MFC_VER und die bisherigen Werte für die bekannten Compiler

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… 😉

6 Gedanken zu „_MSC_VER, _MFC_VER und die bisherigen Werte für die bekannten Compiler“

  1. 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.

  2. 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. 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

This site uses Akismet to reduce spam. Learn how your comment data is processed.