Watcom C/C++ (в настоящее время Open Watcom C/C++ ) — это продукт интегрированной среды разработки (IDE) от Watcom International Corporation для языков программирования C , C++ и Fortran . Watcom C/C++ был коммерческим продуктом, пока его выпуск не был прекращен, а затем выпущен под лицензией Sybase Open Watcom Public License как Open Watcom C/C++. Он содержит инструменты для разработки и отладки кода для операционных систем DOS , OS/2 и Windows , Linux , которые основаны на 16-битных процессорах x86 , 32-битных IA-32 или 64-битных x86-64 .
Хотя компилятор Watcom C/C++ и компилятор Watcom Fortran больше не продаются коммерчески компанией Sybase , они стали доступны бесплатно в виде пакета Open Watcom .
Стабильная версия 1.9 была выпущена в июне 2010 года. [2] [3]
Была выпущена разветвленная бета -версия 2.0, которая поддерживает 64-битные хосты (Windows и Linux), встроенный текстовый редактор, двухфазную систему сборки, а версия для DOS поддерживает длинные имена файлов (LFN). [4]
Open Watcom Wiki имеет обширную историю. [5] [3]
Инициатива открытого исходного кода одобрила лицензию как открытый исходный код , но Debian , Fedora и Фонд свободного программного обеспечения отклонили ее, поскольку «она требует, чтобы вы публиковали исходный код публично всякий раз, когда вы «развертываете» обслуживаемое программное обеспечение, а «развертывание» определяется включать многие виды частного использования». [9]
Компилятор может работать и генерировать исполняемый код для операционных систем DOS , OS/2 , Windows , Linux . Он также поддерживает цели NLM для Novell NetWare . Продолжается работа по распространению таргетинга на Linux [10] и современные операционные системы BSD (например, FreeBSD ), работающие на процессорах x86 , PowerPC и других.
Код является переносимым, и, как и во многих других проектах компиляторов с открытым исходным кодом, таких как GCC или LCC, серверная часть компилятора (генератор кода) является переназначаемой.
В середине 1990-х годов некоторые из наиболее технически амбициозных компьютерных игр для DOS , такие как Doom , [5] Descent , [5] Duke Nukem 3D , [5] Rise of the Triad , [11] и Tomb Raider, были созданы с использованием Watcom C/. C++ с использованием расширителя защищенного режима DOS/4GW с компилятором Watcom.
Он использовался для портирования игры Retro City Rampage на DOS в 2015 году .
Он используется VirtualBox для компиляции BIOS . [13]
Текущая разработка FreeDOS требует, чтобы весь исходный код C мог быть скомпилирован с помощью Open Watcom C. [14]
Open Watcom — рекомендуемый компилятор для разработки приложений и драйверов для операционной системы ArcaOS на базе OS/2 . [15]
На GitHub есть неофициальный форк [16] Open Watcom V2 . [17] Вариант запуска 16-битной библиотеки CRT для DOS был создан с помощью WASM . [18]
Синтаксис Open Watcom поддерживает множество соглашений [ каких? ] введенные другими компиляторами, такими как Microsoft и Borland , включая различные соглашения [ какие? ] относительно (например) количества начальных подчеркиваний в теге «asm». Код, написанный специально для другого компилятора, а не для соответствующего стандарту C или C++, часто компилируется с помощью компилятора Watcom.
По умолчанию компилятор поддерживает стандарты C89/C90.
Open Watcom поддерживает частичную совместимость со стандартом C99 . Он реализует наиболее часто используемые части стандарта. Однако они включаются только через недокументированный ключ командной строки «-za99». Начиная с версии до 1.0, три функции C99 были включены в расширение C90 : комментарии в стиле C++ (//), гибкие члены массива, разрешенная конечная запятая в объявлении перечисления. [19]
Компилятор в настоящее время не поддерживает новые [ когда? ] основные функции C11 , хотя библиотека C включает функции «Safe C». Он указан в ISO/IEC TR 24731-1 [20] [21] и известен как «Интерфейсы проверки границ (Приложение K)» в C11. Некоторые примеры имен функций: strcpy_s(), memcpy_s(), printf_s(). [22] Эта библиотека была выпущена вместе с Open Watcom 1.5 в апреле 2006 года.
Модифицированный код Open Watcom C/C++ DOS 16-bit ..\STARTUP\DOS\CSTRT086.ASM