Zum Inhalt springen

Watcom C/C++

aus Wikipedia, der freien Enzyklopädie
Watcom C/C++
Open Watcom C/C++


Hallo-Welt-Programm in der IDE von Open Watcom C/C++.
Basisdaten

Entwickler Watcom International Corporation, Sybase
Erscheinungsjahr 1988
Aktuelle Version 11.0c[1][2]
(21. Dezember 2002)
1.9 (Open Watcom)[1]
(2. Juni 2010)
Aktuelle Vorabversion 2.0 (Open Watcom)[3]
(4. September 2025)
Betriebssystem Linux, DOS, OS/2, Microsoft Windows[4]
Programmier­sprache C
Kategorie Compiler, IDE
Lizenz Sybase Open Source Licence[5]
deutschsprachig nein
openwatcom.org

Watcom C/C++ ist ein Compiler und eine Entwicklungsumgebung für die Programmiersprachen C und C++.

Der Compiler ermöglicht die Entwicklung von Anwendungen für die Zielplattformen Linux, DOS, NetWare, OS/2, Windows 1.0, Windows 2.x, Windows 3.x (incl. Win32s), Windows 9x und Windows NT.[4]

Es werden die Befehlssatzarchitekturen x86 (16- und 32-Bit) unterstützt. Die Vorabversion von Open Watcom C/C++ 2.0 unterstützt zusätzlich den x64-Befehlssatz (64-Bit).[6]

Bei den Compilern von Watcom C/C++ handelt es sich um Cross-Compiler. Diese können also Programme für andere Betriebssysteme erzeugen.[7][8] Aus der 32-Bit-Entwicklungsumgebung für Windows NT können also beispielsweise 16-Bit-Programme erzeugt werden, die im Real Mode unter MS-DOS laufen.[4]

Die nachfolgende Tabelle enthält eine Auswahl der wichtigsten Änderungen der einzelnen Versionen:[1][9]

Version Datum Beschreibung
Waterloo C for S/370 1984
Watcom C 6.0 1988
  • Ausschließliche Unterstützung von DOS als Host- und Zielplattform
  • Beinhaltete einen Debugger und eine Reihe von Laufzeitbibliotheken
  • Vollständige Kompatibilität mit dem damaligen Entwurf von ANSI C[10]
Watcom C 7.0 1989
  • Erste 32-Bit-Version, weiterhin ausschließlich DOS als Host- und Zielplattform
  • Unterstützung des DOS-Extenders Phar Lap
  • Vertrieb ohne Linker und Debugger
Watcom C 7.0/386
Watcom C 8.0 1990
Watcom C 8.0/386
Watcom C 8.5 1991
Watcom C 8.5/386
Watcom C 9.0 1992
  • Unterstützung von OS/2 2.0 als Host- und Zielplattform
  • Optimierung für Intel-486-Prozessoren
  • Unterstützung von Based Pointers mit Hilfe der Schlüsselwörter __based, __segment, __segname und __self[13]
Watcom C 9.0/386
Watcom C 9.01/386
Watcom C 9.5 1993
  • Compiler für C++ hinzugefügt
  • Optimierungen für Prozessoren der Intel-Pentium-Reihe
  • Unterstützung von Windows NT als Host- und Zielplattform
Watcom C 9.5/386
Watcom C/C++ 10.0 1994
Watcom C/C++ 10.5 1995
  • Unterstützung von Windows 95 und NT 3.5
  • Native Ausnahmebehandlung für C++ unter OS/2 und Win32
  • Unterstützung von TCP/IP-Remote-Debugging
Watcom C/C++ 10.6 1996
  • Strukturierte Ausnahmebehandlung unter C
  • Verbesserte Kompatibilität mit Microsoft-Compilern
Watcom C/C++ 11.0 1997
Watcom C/C++ 11.0b 1998
  • Das SOM-Toolkit für OS/2 wird nicht länger unterstützt und wurde deshalb entfernt.[15]
  • Fehlerbehebung
Watcom C/C++ 11.0c 21. Dezember 2002
  • Erste Version die als Open-Source-Projekt bereitgestellt wurde.[16]
Open Watcom 1.0 28. Januar 2003
  • Der Linker verhält sich bei der Symbol-Auflösung standardmäßig case-sensitive
  • Komponenten des Win32-SDKs und des OS/2-Toolkits werden nicht mehr mitgeliefert
  • Das MFC-Framework und die dazugehörige Dokumentation sind nicht mehr enthalten
Open Watcom 1.1 12. August 2003
  • Fehlerbehebung
Open Watcom 1.2 7. Januar 2004
  • Verbesserte Unterstützung von C99 (u. a. Unterstützung von long long, __func__ und __VA_ARGS__)
  • Die grafische Benutzeroberfläche unterstützt Visual Styles von Windows XP
  • Die Zielplattformen AutoCAD und MFC wurden aus der IDE entfernt
  • Die C-Laufzeitbibliothek wurde optimiert, um kleinere Anwendungen zu erzeugen
  • Überarbeitung der hauseigenen Ressourcen-Editoren (u. a. Drag and Drop für den Bildeditor)
  • Verbesserte Kompatibilität mit MASM 6.x
Open Watcom 1.3 3. August 2004
  • Unterstützung von Standardargumenten in Templates (default template arguments)
  • Sichtbarkeit von Variablen (scope) konform mit ISO/IEC 14882 (ISO C++)
  • Unterstützung von SSE, SSE2, SSE3 und 3DNow
  • Unterstützung der Direktiven .MMX, .K3D, .XMM, .XMM2 and .XMM3 für den Inline-Assembler (in _asm und #pragma aux)
  • Alternative Schlüsselwörter für logische Operatoren (and statt &&, xor statt ^ etc.) und das C99-konforme inline statt _inline resp. __inline
  • Neue C99-konforme Funktionen atoll(), lltoa(), ulltoa(), strtoll() und strtoull() in der C-Laufzeitbibliothek
  • Eliminierung von leeren Segmenten bei 16-Bit-Anwendungen im NE-Format für OS/2 und Windows
  • Die Standard-Datenströme stdaux und stdprn (Drucker) sind nur noch für die Zielplattform DOS definiert
  • Optional verfügbare DirectX-Beispiele
Open Watcom 1.4 14. Dezember 2005
  • Unterstützung von C99-konformen Designated Initializers. Diese erlauben es, Mitglieder einer Klasse direkt mithilfe ihres Namens zu initialisieren, wie beispielsweise:
    struct {int a, b;} c = {.a=0, .b=1};.
    Das gilt analog auch für Arrays, wie beispielsweise:
    int a[4] = {[0]=5, [3]=2};.[17]
  • Neues Schlüsselwort __watcall um die standardmäßige Aufrufkonvention von Watcom.
  • Für C wurden einige Makros in Schlüsselworte umgewandelt: _Cdecl, _Export, _Far16, _Fastcall, _Pascal, __sycall, _System, __try, __except, __finally und __leave
  • Für C++ wurden folgende Makros in Schlüsselworte umgewandelt: _Cdecl, _Export, _Far16, _Fastcall, __inline, _Pascal, __syscall und _System
  • Neue C99-kompatible Funktionen wmemchr(), wmemcmp(), wmemcpy(), wmemmove() und wmemset()
  • Syntaxhervorhebung für Makefiles
Open Watcom 1.5 26. April 2006
  • Unterstützung von ISO/IEC TR 24731 („Extensions to the C Library, Part I: Bounds-checking interfaces“) in der C-Laufzeitbibliothek
  • Neues Schlüsselwort __restrict, das gleichwertig ist mit dem Schlüsselwort restrict aus dem C99-Standard, aber unabhängig vom C99-Modus immer verfügbar und sichtbar ist.
  • Im C99-Modus muss die main() Funktion nicht explizit einen Wert zurückliefern. Fehlt die return Anweisung am Ende der Funktion, wird automatisch der Wert 0 zurückgegeben.
  • Der POSIX-Header libgen.h wurde implementiert.
  • Neue Funktionen btowc(), fwide(), mbsinit(), wctrans(), und towctrans() wurden der C-Laufzeitbibliothek hinzugefügt. Diese unterstützen Multibyte-Character-Sets gemäß dem ISO-C-Standard.
  • Die C99-Funktionen llabs(), lldiv() und _Exit() (äquivalent zu _exit() aus POSIX) wurden hinzugefügt, sowie die Makros fpclassify, isfinite, isinf, isnan, isnormal und signbit
Open Watcom 1.6 15. Dezember 2006
  • Unterstützung von __declspec für Variablen (nicht nur für Funktionen)
  • Fehlerbehebung
Open Watcom 1.7 18. August 2007
  • Die Größe des Stacks wurde für 32-Bit-DOS-Anwendungen standardmäßig von 4 KiB auf 64 KiB erhöht
  • Die Bibliotheken LIBC und CLIB wurden experimentell hinzugefügt
Open Watcom 1.7a 23. Oktober 2007
  • Regressionsfehler behoben[18]
Open Watcom 1.8 21. Februar 2009
  • Der Compiler nutzt verzögerte Initialisierung für Klassen-Templates und deren Mitglieder. Nur wenn diese auch tatsächlich genutzt werden, werden sie initialisiert.
  • Unterstützung der #pragma alias Direktive
  • In der Linux-Laufzeitbibliothek wurden die Funktionen recvfrom() und sendto() implementiert
  • Syntaxhervorhebung für Ressourcen-Dateien
Open Watcom 1.9 2. Juni 2010
  • Neue Schlüsselwörter __int8, __int16 und __int32
  • Die Win32-Header unterstützen die neuen Features von Windows 7
  • Unterstützung von OLE 2.0 für 16-Bit-Programme
  • Unterstützung der Zielplattformen RDOS und ZDOS
  • Unterstützung von langen Dateinamen (englisch Long File Names, LFN)
  • Dokumentation im CHM-Format
  • Syntaxhervorhebung für AWK-Dateien
Open Watcom 2.0 2. April 2015
  • Unterstützung von 64-Bit-Zielplattformen[6]

Neben Watcom C 6.0 wurde 1988 auch eine günstigere, im Funktionsumfang reduzierte Entwicklungsumgebung namens Watcom Express C veröffentlicht.[10][19]

Nachdem die kommerzielle Vermarktung von Watcom C/C++ 2002 eingestellt wurde, wird das Produkt unter dem Namen Open Watcom C/C++ als Open-Source-Projekt kostenlos angeboten. Neben dem Compiler für C/C++ umfasst das Projekt auch noch den Open Watcom Assembler und Open Watcom Fortran 77.[20][8]

Neben der Hauptanwendung umfasst die Entwicklungsumgebung von Watcom C/C++ einige (z. T. optionale) Werkzeuge. Vor der Veröffentlichung von Open Watcom beinhaltete Watcom C/C++ neben den hauseigenen Werkzeugen auch Komponenten des Windows SDKs von Microsoft. Einige Werkzeuge überschneiden sich daher in ihrem Zweck. In Open Watcom wurden die Werkzeuge von Microsoft entfernt.[9]

Werkzeuge von Watcom

[Bearbeiten | Quelltext bearbeiten]

Watcom C/C++ und Open Watcom C/C++ stellen u. a. folgende Werkzeuge zur Verfügung:[21][22]

  • Dr. Watcom
    Eine Alternative bzw. ein Nachbau der Software Dr. Watson von Microsoft.[23]
  • Watcom Source Browser
    Ein Programm zur Visualisierung von Klassenbäumen und Abhängigkeiten.
  • Watcom Dialog Editor
    Ein Nachbau des Microsoft Dialog Editors. Ein WYSIWYG-Editor zur Gestaltung von grafischen Benutzeroberflächen.
  • Watcom DDE Spy
    Ein Nachbau von Microsoft DDE Spy zur Überwachung von DDE-Nachrichten.
  • Watcom Spy
    Nachbau von Microsoft Spy bzw. Spy++ zur Überwachung von GUI-Nachrichten.
  • Watcom Image Editor
    Nachbau des Microsoft Image Editors. Ein Editor für Rastergrafiken (BMP, ICO, CUR)
  • Watcom Resource Editor
    Ein Editor für RES-Dateien. Für Dialog-Ressourcen wird extern der Watcom Dialog Editor geöffnet und für Grafiken der Watcom Image Editor. Für Menüs und String-Tabellen existieren interne Editoren. Das Programm kann auch Ressourcen aus ausführbaren Dateien (u. a. EXE und DLL) anzeigen.
  • Watcom Profiler
    Leistungsüberwachung von Programmfunktionen.[24]
  • Watcom Debugger
    Ein Nachbau des Debuggers WinDbg von Microsoft. U. a. wird auch Remote-Debugging unterstützt. Anwendungen für Novell NetWare (NetWare Loadable Modules, NLM) können nur via Remote-Debugging überwacht werden. Um die Kommunikation zwischen NetWare und dem Debugger zu ermöglichen, werden entsprechende NLMs mitgeliefert.[25]
  • Watcom Zoom
    Ein Nachbau von Microsoft ZoomIn. Eine Softwarelupe.

Werkzeuge von Microsoft

[Bearbeiten | Quelltext bearbeiten]

Aus dem Windows SDK waren bis einschließlich Watcom C/C++ 11.0c u. a. folgende Programme enthalten:

  • Microsoft Dialog Editor
    Ein WYSIWYG-Editor zur Gestaltung von grafischen Benutzeroberflächen.
  • Microsoft DDE Spy
    Überwachung von DDE-Nachrichten.
  • Microsoft Spy
    Überwachung von GUI-Nachrichten.
  • Microsoft Image Editor
    Ein Editor für Rastergrafiken (BMP, ICO, CUR)
  • WinDbg
    Ein Debugger.
  • WinDiff
    Ein Werkzeug zum Vergleich von zwei Dateien.
  • Microsoft ZoomIn
    Eine Softwarelupe.
  • Microsoft Process Viewer
    Eine Software zum Überwachen von gerade ausgeführten Prozessen. Es können auch Prozesse von anderen Rechnern im Netzwerk überwacht werden, sofern dafür eine Berechtigung vorliegt.
  • Microsoft PortTool
    Ein Werkzeug, das alte API-Elemente im Quellcode automatisiert durch neuere Versionen ersetzen kann. Beispielsweise können die 16-Bit-Funktionen, -Makros und -Strukturen der Windows-API in die entsprechenden 32-Bit-Pendants umgewandelt werden.
  • Microsoft API Monitor
    Tracking von externen Funktionsaufrufen.[24]
  • Microsoft DispTest
    Eine im Funktionsumfang reduzierte Version der IDE von Visual Basic 3.0, mit der keine ausführbaren Dateien erstellt werden können. Das Programm dient v. a. zum Testen von VBX-Steuerelementen und generell von 16-Bit-COM-Komponenten, die u. a. mit Watcom C/C++ erstellt werden können.
  • Microsoft Font Editor
    Erstellung und Bearbeitung von Bitmap-Schriftarten im FNT-Format.
  • Microsoft Help Workshop
    Erstellung von Hilfe-Dateien auf Basis von WinHelp (HLP-Format).
  • Microsoft OLE/COM Object Viewer
    Ein Browser für alle registrierten COM-Objekte des Betriebssystems. Zudem können auch einzelne Typbibliotheken angezeigt werden.[26]
  • Microsoft Object Viewer (WinObj)
    Browser für Betriebssystemobjekte. Inzwischen ist die Software Teil von Windows Sysinternals.[27]
  • Microsoft TAPI Browser
    Übersicht über alle Komponenten und Funktionen der TAPI-Schnittstelle.

Vergleich mit anderen Compilern für C/C++

[Bearbeiten | Quelltext bearbeiten]

Obwohl Watcom C 9.5 auf einer vergleichbaren Stufe mit Visual C++ 1.5 oder Borland C++ 4.0 stand, bot die Softwareumgebung keine Klassenbibliothek für Windows an.[23] Visual C++ besaß MFC und Borland C++ OWL.[28]

Da der Watcom C Compiler im Vergleich zu den damaligen Konkurrenzprodukten besonders schnellen Code erzeugen konnte und ab Version 8.5 den DOS4GW DOS-Extender mitlieferte, mit dem 32 Bit Protected-Mode-Programme geschrieben werden konnten und dessen Runtime-Lizenz gebührenfrei war, wurde er zur Entwicklung mehrerer namhaften Spiele wie beispielsweise Doom, Descent, Death Rally, Retro City Rampage, Duke Nukem 3D, Vollgas und Warcraft 2 eingesetzt.[20][29][30][31]

  • Wayne Russell: Watcom C/C++ Unleashed. Sams, ISBN 0-672-30893-2 (englisch).
  • Ulla Kirch, Peter Prinz: C – Lernen und professionell anwenden: Mit Microsoft Visual Studio Express 2012 und Open Watcom-Compiler auf der DVD. 3. Auflage. MITP, 2013, ISBN 978-3-8266-9504-9.
  • Andrew Schulman: Inside Watcom C 7.0/386. In: Dr. Dobb’s Journal. Band 15, Nr. 3, März 1990, ISSN 1044-789X, S. 74–83 (englisch, Volltext [abgerufen am 27. August 2025]).

Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]
  1. a b c Project History. In: wiki.openwatcom.org. 25. Mai 2012, archiviert vom Original am 29. März 2021; abgerufen am 18. Mai 2025 (englisch).
  2. Hajo Schulz: Watcoms C/C++ und Fortran werden Open Source. In: Heise online. 23. August 2000. Abgerufen am 26. August 2025.
  3. Open Watcom v2 Releases. In: github.com. Abgerufen am 4. September 2025 (englisch).
  4. a b c Open Watcom C/C++ Getting Started (Version 2.0). (PDF; 447 kB) Chapter 1: Introduction to Open Watcom C/C++. In: open-watcom.github.io. S. 1–6, abgerufen am 26. August 2025 (englisch).
  5. The Sybase Open Source Licence (SPDX short identifier: Watcom-1.0). In: opensource.org. Abgerufen am 9. Mai 2025 (englisch).
  6. a b Open Watcom v2 Fork. In: open-watcom.github.io. Abgerufen am 26. August 2025 (englisch).
  7. Oliver Lau: C/C++-Compiler Open Watcom in Version 1.4 veröffentlicht. In: Heise online. 20. Januar 2006. Abgerufen am 16. Mai 2025.
  8. a b Michael Wilde: OpenSource-Compiler für C/C++ und Fortran freigegeben. In: Heise online. 8. Februar 2003. Abgerufen am 12. Mai 2025.
  9. a b Release Notes for Open Watcom C/C++ 1.9:
    • Differences from Version 11.0
    • Differences from Open Watcom Version 1.0
    • Differences from Open Watcom Version 1.1
    • Differences from Open Watcom Version 1.2
    • Differences from Open Watcom Version 1.3
    • Differences from Open Watcom Version 1.4
    • Differences from Open Watcom Version 1.5
    • Differences from Open Watcom Version 1.6
    • Differences from Open Watcom Version 1.7
    • Differences from Open Watcom Version 1.8
    In: Open Watcom C/C++ Getting Started. (c_readme.hlp). 25. Mai 2010 (englisch).
  10. a b Stephen Randy Davis et al.: Compiling the facts on C: Evaluating the traits of the new generation of C compilers. In: PC Magazine. Band 7, Nr. 15. Ziff Davis, 13. September 1988, ISSN 0888-8507, Watcom C, S. 115–183 (englisch, Volltext in der Google-Buchsuche).
  11. Karen D. Moser: Watcom claims first tool set to tap Windows, 32-bit memory: developers of CAD, math programs targeted. In: PC Week. Band 8, Nr. 3, 21. Januar 1991, ISSN 0740-1604 (englisch): “Watcom Group Inc announces C 8.0/386 for Windows […] that will let programmers create full 32-bit applications for the Microsoft Windows 3.0 interface while taking advantage of all of the features of the 80386 microprocessor.”
  12. Michal Necasek: Watcom Win386. In: os2museum.com. 4. Mai 2012, abgerufen am 27. August 2025 (englisch).
  13. Watcom C Language Reference (Open Watcom 2.0): Based Pointers for Open Watcom C/16 and C/32. In: open-watcom.github.io. Abgerufen am 27. August 2025 (englisch).
  14. Jacek M. Sawoniewicz: Precompiled Headers. In: pja.edu.pl. Polish-Japanese Academy of Information Technology, abgerufen am 27. August 2025 (englisch).
  15. Readme: B-level Notes. In: Watcom C/C++ Version 11.0b. (readme.txt auf Installationsdatenträger). 24. Februar 1998 (englisch): “The SOM toolkit for OS/2 is no longer supported, and has been removed in this version.”
  16. Sybase to Open Source Watcom C/C++ and Fortran Compilers: SciTech Software Selected as Official Maintainer for the Open Watcom Project. In: sybase.com. 22. August 2000, archiviert vom Original am 25. September 2000; abgerufen am 27. August 2025 (englisch).
  17. Chapter 6.2.11: Designated Initializers. Abgerufen am 30. August 2025 (englisch).
  18. Peter C. Chapin: Open Watcom v1.7a released. In: os2world.com. 8. November 2007, abgerufen am 4. September 2025 (englisch).
  19. Of Interest. In: Dr. Dobb’s Journal. Band 13, Nr. 3, März 1988, ISSN 1044-789X, S. 130–132 (englisch, Volltext [abgerufen am 6. September 2025]).
  20. a b Open Watcom Dot Org: About Us. In: openwatcom.com. Archiviert vom Original am 29. April 2016; abgerufen am 7. Mai 2025 (englisch).
  21. Watcom Graphical Tools User’s Guide (Version 11.0c). (PDF; 1,5 MB) In: downloads.openwatcom.org. 2000, abgerufen am 8. September 2025 (englisch).
  22. Open Watcom Graphical Tools User’s Guide (Version 1.9). (PDF; 1,7 MB) In: open-watcom.github.io. 2010, abgerufen am 8. September 2025 (englisch).
  23. a b Nancy Micolaisen: Watcom C/C++ [16] / Watcom C/C++ [32]. In: PC Magazine. Band 13, Nr. 6. Ziff Davis, 29. März 1994, ISSN 0888-8507, S. 221–225 (englisch, Volltext in der Google-Buchsuche).
  24. a b Ron van der Wal: Source-Code Profilers for Win32. In: Dr. Dobb’s Journal. Band 23, Nr. 3, März 1998, ISSN 1044-789X (englisch, Volltext [abgerufen am 9. September 2025]).
  25. Debugging a Novell NLM. In: open-watcom.github.io. Abgerufen am 17. Oktober 2025 (englisch).
  26. OLE/COM Object Viewer. In: learn.microsoft.com. Microsoft, abgerufen am 9. September 2025 (englisch).
  27. WinObj. In: learn.microsoft.com. Microsoft, abgerufen am 9. September 2025 (englisch).
  28. Jens Bartschat: Kurztutorial zur Windowsprogrammierung unter C++. Hrsg.: Universität der Bundeswehr. München 1995, ISBN 3-8386-4018-7, Kapitel 1.4: Klassenbibliotheken, S. 8 (eingeschränkte Vorschau in der Google-Buchsuche).
  29. Michal Necasek, Christian Hennecke: Watcom C/C++ 11.0c unter OS/2 nutzen. In: os2voice.org. November 2001, abgerufen am 15. Oktober 2025.
  30. Jari Komppa: Porting from DOS to Windows: Step by step through Death Rally’s journey to the new millennium. In: Game Developer. Band 17, Nr. 4. UBM, April 2010, ISSN 1073-922X, S. 38–41 (englisch, Volltext [Memento vom 10. Juni 2021 im Internet Archive] [PDF; 23,2 MB]).
  31. Wouter Groeneveld: The Creative Programmer. Manning, Shelter Island 2023, ISBN 978-1-63343-905-4, Kapitel 5.4.6: First-Google-hit coding, S. 113 f. (englisch, eingeschränkte Vorschau in der Google-Buchsuche): “The now open source and fully documented Open Watcom C/C++ toolkit used to compile the game [Retro City Rampage] was also used by DOOM, Duke Nukem 3D, and Full Throttle.”