Watcom C/C++ (später Open 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.

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

Bei den Compilern von Watcom C/C++ handelt es sich um Cross-Compiler. Diese können also Programme für andere Betriebssysteme erzeugen. 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.

Geschichte

Die nachfolgende Tabelle enthält eine Auswahl der wichtigsten Änderungen der einzelnen Versionen: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. (). (englisch).

Version Datum Beschreibung Waterloo C for S/370 Erste Version für System/370 Watcom C 6.0 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 Watcom C 7.0 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 Ergänzung von Programmierwerkzeugen (Linker, Bibliotheksmanager, Debugger und Profiler) Grafikbibliothek hinzugefügt Watcom C 8.0/386 Unterstützung aller Features der Intel-80386-Architektur Watcom C 8.5 Gemeinsamer Vertrieb mit DOS/4GW Unterstützung von Windows 3.0 (Win386-Extender) Unterstützung von Unicode OS/2-Anwendungen als Hostplattform Watcom C 8.5/386 Watcom C 9.0 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 Watcom C 9.0/386 Watcom C 9.01/386 Unterstützung von Windows 3.1 Watcom C 9.5 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 Gemeinsamer Vertrieb von 16-Bit- und 32-Bit-Programmierwerkzeugen Grafische Benutzeroberfläche der IDE für Windows und OS/2 Überarbeiteter Debugger Klassenbrowser für C++ hinzugefügt Unterstützung von vorkompilierten Header-Dateien Editor für Ressourcen von Windowsprogrammen MFC-Bibliothek hinzugefügt Watcom C/C++ 10.5 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 Strukturierte Ausnahmebehandlung unter C Verbesserte Kompatibilität mit Microsoft-Compilern Watcom C/C++ 11.0 Namensräume, RTTI und neuer Stil für Typumwandlung Unterstützung von 64-Bit-Integer Unterstützung von inkrementellem Linken Unterstützung von COFF und ELF Objektdateien (*.obj) im Linker und Bibliotheksmanager Unterstützung von Multibyte Character Sets in Bibliotheken DLL-basierte Werkzeuge in der IDE Watcom C/C++ 11.0b Das SOM-Toolkit für OS/2 wird nicht länger unterstützt und wurde deshalb entfernt. Fehlerbehebung Watcom C/C++ 11.0c Erste Version die als Open-Source-Projekt bereitgestellt wurde. Open Watcom 1.0 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 Fehlerbehebung Open Watcom 1.2 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 Unterstützung von Standardargumenten in Templates () Sichtbarkeit von Variablen () 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 Unterstützung von C99-konformen . 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 = {=5, =2};. 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 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 Unterstützung von __declspec für Variablen (nicht nur für Funktionen) Fehlerbehebung Open Watcom 1.7 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 Regressionsfehler behoben Open Watcom 1.8 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 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 (, LFN) Dokumentation im CHM-Format Syntaxhervorhebung für AWK-Dateien Open Watcom 2.0 Unterstützung von 64-Bit-Zielplattformen

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

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.

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

Werkzeuge von Watcom Watcom C/C++ und Open Watcom C/C++ stellen u. a. folgende Werkzeuge zur Verfügung:

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

Vergleich mit anderen Compilern für C/C++ 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. Visual C++ besaß MFC und Borland C++ OWL.

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.

Literatur

Weblinks

Einzelnachweise

Kategorie:C (Programmiersprache) Kategorie:C++ Kategorie:Integrierte Entwicklungsumgebung Kategorie:DOS-Software Kategorie:OS/2-Software Kategorie:Windows-Software