Microsoft C

Microsoft C/C++


Hallo-Welt-Programm und Compiler-Einstellungen von Microsoft C/C++ 7.0
Basisdaten

Entwickler Microsoft
Erscheinungsjahr 1983
Aktuelle Version 7.0
(1992)
Betriebssystem MS-DOS, OS/2
Kategorie Compiler
Lizenz MS-EULA

Microsoft C/C++ ist ein Compiler für die Programmiersprachen C und C++ auf Basis von Lattice C und ist ANSI C und K&R C kompatibel.[1] Es ist möglich, zwischen reinem ANSI C und den Spracherweiterungen von Microsoft zu wählen.[2] Die letzte Version des Compilers stellt den Vorgänger von Microsoft Visual C++ 1.0 Professional dar. Die Standard-Edition von Visual C++ 1.0 basiert hingegen weitestgehend auf Microsoft QuickC.[3]

Geschichte

Die erste Version von Microsoft C war identisch mit Lattice C. Es wurde letztendlich nur das Produkt Lattice C unter einem anderen Namen vertrieben. Auch die zweite Version basierte auf Lattice C. Allerdings wurden die verfügbaren Speichermodelle angepasst.[1]

Speichermodelle von Lattice C 2.0[4][5]
Speicher­modell Segmente Zeiger Beschreibung
Code Data Code Data
Small (S) 64 KiB 64 KiB Near Near Entspricht dem Small-Modell im x86-Standard
Program (P) 1 MiB 64 KiB Far Near Entspricht dem Medium-Modell im x86-Standard
Data (D) 64 KiB 1 MiB Near Far Entspricht dem Compact-Modell im x86-Standard
Large (L) 1 MiB 1 MiB Far Far Entspricht dem Large-Modell im x86-Standard

Ab Version 3.0 nutzt Microsoft eine eigene Implementierung für den C-Compiler. Die Speichermodelle von Lattice C wurden durch die Intel-x86-Speichermodelle (vgl. Speichermodelle von Turbo C) ersetzt.[1] Diese legen fest, wie der Speicher im Real Mode von x86-Prozessoren segmentiert werden soll. Darüber hinaus wird ab dieser Version Mixed-Model Programming unterstützt.[6][7] Programme, die das Tiny-Speichermodell nutzen, können auch als COM-Datei erzeugt werden. Allerdings können diese Programme dann keinen Return Code zurückliefern.[8] Standardmäßig wird das Small-Modell genutzt und eine EXE-Datei erzeugt.[9]

Es können nur 16-Bit-Anwendungen erstellt werden. Der Compiler unterstützt die Befehlssatzarchitekturen Intel 8086, Intel 80186 und Intel 80286. Aus der Dokumentation von Microsoft C++ 7.0 geht hervor, dass auch die 32-Bit-Befehlssatzarchitekturen Intel 80386 und Intel 80486 vorgesehen waren, aber nicht in der Version implementiert wurden. Allerdings wurden entsprechende Kommandozeilenparameter für zukünftige Versionen reserviert.[10]

Im Gegensatz zu den früheren Versionen enthält Microsoft C ab der dritten Version ein vergleichsweise großes SDK.[11] Dabei handelt es sich um die C-Standard-Bibliothek und weitere Header-Dateien. Unter anderem wird auch eine Bibliothek bereitgestellt, mit der die Kompatibilität zu älteren, in Lattice C geschriebenen Programme sichergestellt werden kann.[6][12][1]

Ab Version 7.0 unterstützt der Compiler auch C++ und damit die Sprachelemente der objektorientierten Programmierung (z. B. Klassen) und die strukturierte Ausnahmebehandlung. Er ist vollständig mit dem AT&T C++ Standard 2.1 kompatibel, jedoch nur eingeschränkt mit der Version 3.0 oder später.[13] Im Lieferumfang sind zudem das Windows 3.1 SDK und die erste Version der Microsoft Foundation Classes (MFC) als statische Bibliothek enthalten.[14] Es ist damit möglich, komplexe grafische Benutzeroberflächen mit Fenstern, Dialogen, Steuerelementen, Object Linking and Embedding (OLE) und Multiple Document Interfaces (MDI) zu erstellen. Ab dieser Version können erstmals 32-Bit-Anwendungen erstellt werden, die im Protected Mode von x86-Prozessoren lauffähig sind. Im Gegensatz zu den meisten anderen C Compilern aus der damaligen Zeit, unterstützte der Compiler von Microsoft auch p-Code.[13]

Die erste Version von Visual C++ unterstützte ebenfalls nur 16-Bit-Architekturen und wurde im Februar 1993 veröffentlicht. Im August 1993 erschien eine Version, die auch in der Lage war, 32-Bit-Anwendungen zu erstellen. Ab der Version 2.0 von Visual C++ wurden nur noch 32-Bit-Anwendungen unterstützt.[15][16]

Neben Microsoft C/C++ wurde auch eine vereinfachte Version namens Microsoft QuickC entwickelt. Die Standard-Edition von Visual C++ 1.0 basierte auf QuickC, während die Professional-Edition auf Microsoft C/C++ 7.0 basiert.[3] Die letzte Version von QuickC (Microsoft QuickC for Windows 1.0) ist kompatibel mit dem Compiler von Microsoft C 6.0.[17]

Durch Microsofts Freigabe und Veröffentlichung des Quellcodes von MS-DOS 4.0 am 25. April 2024 ist der Microsoft C Compiler in der Version 5.10 mitsamt dessen Linker LINK.EXE (Version 3.65) und NMAKE.EXE (Version 1.00.05), sowie der dazugehörigen C-Bibliothek und dem Microsoft Assembler MASM (Version 5.10) als Binärcode öffentlich auf GitHub verfügbar.[18][19]

Entwicklungsumgebung

Seit Version 6.0 wird neben dem Compiler auch die zeichenorientierte Entwicklungsumgebung Programmer’s WorkBench (PWB) mitgeliefert. Unter anderem ermöglicht die Entwicklungsumgebung die Kombination von Programmfragmenten, die in unterschiedlichen Programmiersprachen entwickelt wurden (Mixed-Language Programming).[20] Neben Microsoft C werden die Programmiersprachen Microsoft Macro Assembler (MASM), QuickBASIC, FORTRAN und COBOL unterstützt.[21]

Mixed-Language Programming

Programmfragmente in unterschiedlichen Sprachen werden von unterschiedlichen Compilern in Objektdateien (*.obj) umgewandelt und anschließend mit einem Linker zu einem fertigen Programm zusammengeführt.[22]

Die unterschiedlichen Programmiersprachen nutzen unterschiedliche Ansätze zur Speicherverwaltung und -adressierung. Daher ist es nur möglich, die Speichermodelle Medium, Large und Huge zu nutzen. Die Speichermodelle Small und Compact werden nicht unterstützt und führen zu Schutzverletzungen und letztendlich zum Programmabsturz.[22]

Darüber hinaus unterstützt Microsoft C auch Inline-Assemblerfragmente. Dazu dienen __asm-Böcke. Allerdings wird hier nur eine Teilmenge des MASM-Befehlssatzes unterstützt. Das Schlüsselwort asm aus dem AT&T-Standard wird nicht unterstützt.[23]

Kontextsensitive Hilfe

Die Entwicklungsumgebung bietet eine kontextsensitive Hilfe an. Befindet sich der Cursor innerhalb eines Schlüsselwortes oder bekannten Funktion, kann man durch Drücken der F1-Taste oder einem Rechtsklick die Dokumentation für das jeweilige Sprachelement anzeigen lassen.[24]

Beispiel

Das folgende Hallo-Welt-Programm gibt den Text „Hallo Welt!“ im Standard-Ausgabe-Datenstrom (STDOUT) aus.

#include <stdio.h>

int main(void)
{
  printf("Hallo Welt!\n");
  return 0;
}

Literatur

Einzelnachweise

  1. a b c d Steve Leibson et al.: Expert team analyzes 21 C compilers. In: Computer Language. Band 2, Nr. 2. CL Publications, Februar 1985, ISSN 0749-2839, S. 73–103 (englisch, archive.org [PDF; 59,4 MB; abgerufen am 24. August 2022]).
  2. Additional Global Options. Programmer’s WorkBench. In: Microsoft C/C++ 7.0 Hilfe (CL.HLP). 1992 (englisch).
  3. a b Kelley Damore: Visual C++ adds Windows support. In: InfoWorld. Band 15, Nr. 8. Popular Computing Inc., 22. Februar 1993, ISSN 0199-6649, S. 17 (englisch, eingeschränkte Vorschau in der Google-Buchsuche).
  4. Lattice Inc. (Hrsg.): Lattice 8086/8088 C Compiler: Manual Supplement for Version 2.00 of Compiler. Lifeboat Associates, New York 1982, Major New Features, S. 5 f. (englisch).
  5. Lattice Inc. (Hrsg.): Lattice C Manual: Lattice 8086/8088 C Compiler. Supplement to Lattice C v. 2.1. Lifeboat Associates, New York 29. Mai 1984, Memory Addressing Models, S. 4.28–4.34 (englisch, archive.org [PDF; 7,6 MB; abgerufen am 29. Mai 2024] Seiten innerhalb des Sammeldokuments: S. 140–146).
  6. a b Microsoft (Hrsg.): Microsoft C Compiler User’s Guide for the MS-DOS Operating System. 1985, Document Number: 8415L-300-02; Part Number: 048-014-025, S. 148–154, 199–222 (englisch, archive.org [PDF; 252,4 MB; abgerufen am 2. Juni 2024]).
  7. Raymond Chen: A look back at memory models in 16-bit MS-DOS. In: devblogs.microsoft.com. Microsoft, 28. Juli 2020, abgerufen am 1. Juni 2024 (englisch).
  8. Günter Born: MS-DOS-Programmierhandbuch. Markt+Technik, 1993, ISBN 978-3-89090-894-6, S. 126, 518–519 (borncity.com [PDF; 3,0 MB; abgerufen am 19. Februar 2024]).
  9. Small Memory Model: Details. Programmer’s WorkBench. In: Microsoft C/C++ 7.0 Hilfe (CL.HLP). 1992 (englisch): “The small memory model is the default if no other memory model is specified.”
  10. Processor-Specific Instructions. C/C++ Compiler. In: Microsoft C/C++ 7.0 Hilfe (CL.HLP). 1992 (englisch).
  11. Nabajyoti Barkakati: The Waite Group’s Microsoft C Bible. 2. Auflage. Sams, Carmel 1990, ISBN 0-672-22736-3, S. vii (englisch, eingeschränkte Vorschau in der Google-Buchsuche).
  12. Microsoft (Hrsg.): Microsoft C Run-Time Library Reference for the MS-DOS Operating System. 1985, Document Number: 8417L-300-00; Part Number: 048-014-026, S. 80 (englisch, archive.org [PDF; 135,6 MB; abgerufen am 2. Juni 2024]).
  13. a b Richard Hale Shaw: Microsoft C/C++ 7.0: Catching Up to Borland In the Compiler Race. In: Ziff Davis (Hrsg.): PC Magazine. Band 11, Nr. 11, 16. Juni 1992, ISSN 0888-8507, S. 54 (englisch, eingeschränkte Vorschau in der Google-Buchsuche [abgerufen am 11. Oktober 2023]).
  14. List of the version history of Microsoft Foundation Classes DLLs. KB196831. In: support.microsoft.com. Microsoft, 21. November 2006, archiviert vom Original am 2. Mai 2007; abgerufen am 13. Oktober 2023 (englisch).
  15. Kelley Damore: Microsoft set to prerelease 32-bit Visual C++. In: InfoWorld. Band 15, Nr. 29. Popular Computing Inc., 19. Juli 1993, ISSN 0199-6649, S. 12 (englisch, eingeschränkte Vorschau in der Google-Buchsuche).
  16. Malcolm Smith: A visual history of Visual C++. In: malsmith.net. 4. März 2017, abgerufen am 9. August 2023 (englisch).
  17. Stuart J. Johnston: Microsoft Readies QuickC for Windows for July Introduction. In: InfoWorld. Band 13, Nr. 19. Popular Computing Inc., 13. Mai 1991, ISSN 0199-6649, S. 113 (englisch, eingeschränkte Vorschau in der Google-Buchsuche).
  18. Scott Hanselman, Jeff Wilcox: Open sourcing MS-DOS 4.0. In: cloudblogs.microsoft.com. Microsoft, 25. April 2024, abgerufen am 29. Mai 2024 (englisch).
  19. Rich Turner et al.: MS-DOS > v4.0 > src > TOOLS. In: github.com. Microsoft, 25. April 2024, abgerufen am 29. Mai 2024 (englisch, Microsoft C Compiler mitsamt weiterer Tools aber ohne IDE aus der Quellcodeveröffentlichung von MS-DOS 4.0).
  20. Thomas Kregeloh: Die Microsoft Programmer’s Workbench. Arbeiten mit dem Microsoft C/C++ PDS 7.0. 1. Auflage. Vieweg, Braunschweig 1992, ISBN 3-528-05189-2, doi:10.1007/978-3-322-84245-9.
  21. Microsoft Advisor. In: Microsoft C/C++ 7.0 Hilfe (ADVISOR.HLP). 1992 (englisch).
  22. a b Microsoft (Hrsg.): Mixed-Language Programming Guide. 1987, Document No.: 410840031-500-R00-0887, Part No.: 016-014-049, S. xi, 7 f., 15 f. (englisch).
  23. __asm. C/C++ Language. In: Microsoft C/C++ 7.0 Hilfe (CLANG.HLP). 1992 (englisch).
  24. Help on Language Keywords. Microsoft Advisor. In: Microsoft C/C++ 7.0 Hilfe (ADVISOR.HLP). 1992 (englisch).