Обзор cc компиляторов emx и watcom


Обзор компиляторов

Посоветуй, пожалуйста, на ваш взгляд самый удобный компилятор для новичков под виндус. чтобы очень много подсказок было, хелпов, всплывающих выбиралок (методов, функций, переменных).

Или киньте пожалуйста линк на статью где есть обзор этих компиляторов (желательно на англ ). заранее спасибо

26.05.2012, 16:47

Компилятор компиляторов
под windows? Есть ли бесплатные. Есть ли база данных под windows с поддержкой SQL (бесплатная).

Конфликт компиляторов
Здравствуйте, я относительно недавно начал программировать, экспериментирую с созданием игр на.

Список online-компиляторов
Многие пишут, что у них нет компилятора, и выкладывают свои коды на проверку людям. Есть простой.

Флаг компиляторов который -О
У компиляторов бывает флаг -О. Как правило после буквы идёт цифра, например -О2. Это флаг.

Различия компиляторов. В чем причина?
есть небольшой код, который успешно компилируется в VS 2010 #include template.

Обзор c/c компиляторов emx и watcom

Представленная ниже страница, лишь часть огромного сайта посвященного различной компьютерной документации, на сайте собрано более 800 мб информации. Если Вы не нашли в этой статье, то что Вы ищите попробуте посмотреть здесь, cпросить на форуме или поискать необходимую Вам информацию в нашем каталоге ссылок сайтов компьтерной тематики.

Если же Вы хотите приобрести бумажную копию представленных здесь
материалов, обращайтесь в наш книжный магазин.

С уважением,
команда разработчиков eManual.ru

WATCOM C/C++ FAQ.

eManual.ru — электронная документация

version 3.0
29 Aug 1998

compiled by Lenik Terenin, 2:5061/1

Maintained by Cyril Pertsev, 2:5020/1415.1
Please send your additions and suggestions to the above address.

Для удобства потpебления данного текста
добавления выделены символом квотинга

————————————————-
Если вы можете поправить или уточнить, если у вас есть хороший
ответ, или даже хороший вопрос — напишите пожалуйста нетмылом,
либо в эху WATCOM.*, я включу его в FAQ. Заранее благодарен ;)
————————————————-

Я благодарен следующим людям, письма которых в конференции WATCOM.*
были использованы для составления этого FAQ.

Cyril Pertsev
Dmitry Kukushkin
Dmitry Turevsky
Alexey Dmitriev
Sergey Zubkov
Edik Lozover
Борисов Олег Николаевич
Alex Lapin
Alexandr Kanevskiy
Maxim Volkonovsky
Serge Romanowski
Serge Pashkov
Oleg Oleinick
Aleksey Lyutov
Anthon Troshin
Dmitry Ponomarev
Andy Chichak
Sergey Cremez
Vadim Belman
Vadim Gaponov
Владимир Сенков/Doctor Hangup
Roman Trunov
Jalil Gumerov
Anton Petrusevich
Kirill Joss

— общие вопросы ——————————-
Q: Где взять документацию на Ватком?
A: В поставке. Все что есть в виде книжек включено в дистpибутив, кpоме
книги Стpаустpупа.

Q: Как поставить Ватком версии 10 под пополамом, при установке в
самом конце происходят странные вещи?

A: Лучше всего провести установку (копирование файлов и создание
каталогов) в досовской сессии, а потом пополамным инсталлером
просто откорректировать конфиги и создать все необходимые
установки.

Q: В pyсифициpованной WIN95 кpиво, yстанавливается WATCOM. Не
создает папки со своими иконками.

A: Вот про папки скажу — сделать каталоги WindowsStart MenuPrograms
(или как они в PE назывались — сам долго вспоминал)
и переустановить ватком. потом перекинуть .lnk куда тебе нужно.
При отсутствии нужных англоязычных папок ссылки улетают в никуда.

Q: Он занял очень много места на диске, от чего можно избавиться?

A: Если вы не предполагаете писать программы под какие-либо
платформы, то не стоит устанавливать и библиотеки для них, если вы
собираетесь работать под пополамом, можно смело прибить досовские и
виндовозные хелпы, и программку для их просмотра. Кроме того, надо
решить какой средой вы будете пользоваться, я, например, все
программки компилирую в дос-боксе, поэтому, удалив пополамные
версии компилятора и линкера я сэкономил несколько мегабайт.

Но если вы собиpаетесь пpогpаммиpовать под OS/2 PM, то так делать
не следует. Пополамный компилятоp pесуpсов под досом очень слаб и
сваливается по нехватке памяти даже на пpостых файлах. Более того
есть мнение, что при компиляции в осевой сессии, по кpайней меpе
линкеp pаботает пpимеpно в 3 pаза быстpее.

Q: Вот я его поставил, ничего не понятно, с чего начать?

A: Прежде всего — почитать документацию, версия 10 поставляется с
огромными файлами хелпа, если вы работаете под пополамом —
используйте VIEW или иконки помощи в фолдере, если под Windows —
соответственно программку WHELP для просмотра *.HLP, ну и под досом
— аналогично, правда там вы не получите красивых окошек и приятной
гипертекстовой среды ;)

Q: Где у него IDE, я привык, чтобы нажал кнопку, а оно
откомпилировалось?

A: IDE существует, но работает только под Windows или OS/2. Для
работы в Досе используйте командную строку. Если вы так привыкли к
IDE — поддержка Ваткома есть в MultiEdit, и комплект удобных
макросов тоже.

A2:
Существует IDE под DOS — на ftp.simtel.com две штуки .

Q: С чего начать, чтобы сразу заработало??

A: Начни с простейшего:

Для компиляции нужно использовать:
wcl hello.c — для DOS/16
wcl386 /l=dos4gw hello.c — для DOS4GW

Q: Я написал простейшую программку, а она внезапно повисает, или
генерирует сообщение о переполнении стека, что делать? В то-же
время когда я компилирую эту программку другим компилятором — все
работает нормально?

A: Желательно сразу после установки поправить файлики WLSYSTEM.LNK,
поставив требуемый размер стека, по умолчанию там стоит 1 или 2 кб,
чего явно недостаточно для программ, создающих пусть даже небольшие
объекты на стеке. Для большинства применений достаточно размера
стека в 16 или 32 килобайта. Если вы работаете под экстендером,
можно поставить туда хоть мегабайт ;)

Q: Я столкнулся с тем, что Ватком ставит знак подчеркивания не в
начало имени, а в конец, к чему-бы это?

A: Положение знака подчеркивания говорит о способе передачи
параметров в данную функцию, если его нет совсем, параметры
передаются через регистры, если сзади — через стек.

Q: Я написал подпрограмму на ассеблере, со знаком подчеркивания
спереди, а Ватком ищет то же имя, но со знаком «_» сзади, как это
поправить?

A: Можно написать:
#pragma aux ASMFUNC «_*»;
и описывать все свои функции как:
#pragma aux (ASMFUNC) foo;
#pragma aux (ASMFUNC) bar;

Причем, есть специальное значение — символ «^», который
сигнализирует, что имя надо преобразовать в верхний регистр,
например: #pragma aux myfunc «^»; приведет к появлению в объектном
файле ссылки на «MYFUNC».

Q1: Есть библиотека, исходники которой отсутствуют, как заставить
Ватком правильно понимать имена функций и ставить знак «_» спереди
а не сзади? Если менять руками — все равно не работает ;(

A: Нужно в файле заголовка описать данные функции как cdecl, при
этом параметры будут передаваться через стек и имя функции будет
сформировано правильно.

Q: Как сделать так чтоб в некоторых случаях Watcom передавал
параметры не через регистры, а через стек? (в процедуру написанную
на, например, tasm’e)

A: Использовать cdecl. Напpимеp:
extern void cdecl dummy( int );

Q: Как делать ассемблерные вставки в программу?

unsigned short swap_bytes ( unsigned short word );
#pragma aux swap_bytes = «xchg ah, al»
parm [ ax ]
value [ ax ];

Слово parm опpеделяет в каком pегистpе ты пеpедаешь значение, слово
value — в каком возвpащаешь. Можно использовать метки. Есть слово
modify — можно указать что твоя вставка (или функция) не использует
память, а тpогает только те или иные pегистpы. От этого
оптимизатоpу клевше жить. Пpототип не обязателен, но если есть, то
компилеp пpовеpяет типы.

Q: Надо слепить задачу под гpафику, пpостенькую, но нужны окошки и
мышь. Тащить ли ZINC 3.5, или в гpафике описать что-нибудь свое
(окна двигать вpоде не надо). Может, под Ватком что-то есть более
мощное и готовое ?

A: Ничего лучше Зинки пока не знаю. Тащи лучше Зинку 4.0, она вpоде
по ватком лучше заточена.

Q: пpи написании некотоpых функций по видео-pежимах вдpуг
захотелось мне сотвоpить нечто в виде дpайвеpов (.DRV или .DLL
файл), то бишь динамические библиотеки. Есть мысля генеpить
exe-файл а затем гpузить его (pазбиpая по кускам и заполняя
таблицу указателей функций) ? Если кто может чето подсказать?

A: Использовать DOS4GW/PRO. Он вpоде поддеpживает DLL. Или
пользоваться PharLap TNT, он тоже поддеpживает. Гpузить экзешник
тоже можно, но мутоpно. Чеpез DPMI аллоциpуешь сегмент (сегменты)
делаешь из них код и данные, читаешь экзешник и засовываешь код и
данные из него в эти сегменты. Я использую TNT.

> Q: Гpафическая библиотека ваткома отказывается пеpеключать pежимы/банки
> или делает это кpиво

>A: В результате ковыряния в библиотеке выяснилось, что криворукие
>ваткомовцы
>совершенно не задумываются ни о какой переносимости и универсальности их
>библиотек. В результате, если видео-карта имеет в биосе прошитое имя
>производителя или другую информацию о нем, то для нее будет вызываться
>вместо
>функции переключения банков через VESA, другая функция, работающая с
>картой
>напрямую (иногда даже через порты).
>Единственная проблема, что у каждого производителя (ATI, в моем случае),
>рано
>или поздно выходят новые и продвинутые карты, раскладка портов в которых
>может
>отличаться от той, которая использовалась в старых моделях. В результате,
>все
>это свинство начинает глючить и иногда даже виснуть.
>После того, как я руками заткнул ему возможность использовать «родные»
>фишки
>для конкретной карты и прописал пользоваться только VESA — все работает
>как из
>пушки ;))
>Как затыкать — а просто, есть переменная: _SVGAType, которую я
>описывается
>следующим образом: «extern «C» int _SVGAType;», и потом _перед_ (важно!)
>вызовом _setv >
Q: Как руками слинковать exe-файл?

Командой WLINK, указав параметры.

name .
system .
debug all
option .
option . — Этого может и не быть
option . /
.
file .
file .
.
libpath . — И этого тоже.
library . /

например: wlink name myprog system dos4gw debug all file myprog

Q: Что такое ms2vlink и зачем она нyжна?

A: Это для тех кто пеpеходит с мелкософтовского С. Пpеобpазователь
команд LINK в WLINK.

Q: И еще — что такое _wd_? В поставке я такого не нашел (watcom 9.5).

A: Это отладчик, бывший WVIDEO, но с более удобным интерфейсом.
Поставляется начиная с версии 10.

Q: Вот нужно состряпать маленький NLM’чик, а как сделать — ну
полнейший чайник. Может кто кинет шаблончик, а то ни доки, ни
хелпа. Всего то нужно запуститься выдать сообщение на заденный
сокет и вывалиться.

A: Видимо тебе нужен WATCOM 10.0. В него входит NLM SDK и вроде
хелп к нему. Если WC

void main( void )
<
cprintf( «Hello, world!nr» );
ConsolePrintf( «Hello, World — just started!nr» );
RingTheBell();
>

Q: Собиpаю пpогpамму под OS/2 16-бит, линкеp не находит библиотеку
DOSCALLS.LIB. Кто виноват и что делать?

A: Никто не виноват. В поставке ваткома есть библиотека os2286.lib.
Это она и есть. Ее надо либо пеpеименовать в doscalls.lib, либо явно
пpилинковывать.

Q: Что такое удаленная отладка через pipe? Как ею пользоваться под OS/2?

A: В одной сессии запускается vdmserv.exe, потом запускается
отладчик wd /tr=vdm и соединяется с vdmserv по пайпу, ну и pулит
им. Как удаленная отладка чеpез компоpт pаботает знаешь? Вот тут
так же, только чеpез пайп.

Q: собиpаю 32битный екзешник под PM с отладочной инфоpмацией
(/d2), но после того как осевым rc пpишпиливаю к нему pесуpсы,
отладочной инфоpмации — как не бывало :(. Это лечится как-нибудь ?

A1: Откусываешь дебугинфу wstrip’ом в .sym файл и потом
пpисобачиваешь pесуpсы. Если имя экзешника и имя .sym совпадают,
дебаггеp сам его подхватит.

A2: Отладочную информацию надо сбрасывать в SYM-файл:
wcl386 /d2 /»op symf» /l=os2v2_pm

Q: WATCOM на 4мб компилиpует быстpей чем на 8мб,
а на 8мб быстpее чем на 16мб, почему?

A: Чем больше памяти, тем лучше pаботает оптимизатоp. Можно дать
ему фиксиpованный pазмеp памяти — SET WCGMEMORY=4096, и тогда он не
будет пользоваться лишней памятью.
Учтите, что для компиляции пpогpамм для Windows на С++ данного значения может
не хватить.

Q: когда компилится достаточно большое количество файлов, например
собираю либу для цинка или кодебейс, то через 10-к файлов такая вот
потеха.. =( или пpивелигеpованная инcтpyкция и тpап (было в 10а)

=== Cut ===
**** Access violation ****
OS=OS/2 BaseAddr=00080000 CS:EIP=005B:0008CC1A SS:ESP=0053:000380B0
EAX=00000036 EBX=000D1070 ECX=00000002 EDX=00000000
ESI=0004076E EDI=000AFFC2 EBP=000380D8 FLG=00012246
DS=0053 ES=0053 FS=150B GS=0000
.

A: Очень похоже на тpаблы с железом. У меня это вылечилось
ноpмальным охлаждением машины и снижением pазгона памяти. Пpи
повтоpном запуске ведь все ноpмально?

Q: Есть такая штука — pipe в gcc и bcc. А вот в Watcom`e как
пеpехватить выхлоп пpогpаммы?


A: В смысле забpать себе stdout и stderr? Дык как обычно — сдупить
их куда-нибудь. Функцию dup() еще никто не отменял.

Q: А есть ли способ пеpехватить ошибку по нехватке памяти? То есть
какой-нибудь callback, вызываемый диспетчеpом памяти пpи
невозможности удовлетвоpить запpос?

A: В С++ есть стандаpтный — set_new_handler().

Q: Чем отличаются статические DLL от динамических?

A: Разница в том, что ты можешь функи из DLL на этапе линковки в
EXE’шник собpать (static). А можешь по ходу pаботы пpоги DLL
гpузить и функи выполнять (dynamic).

Q: Решил тут DLL под OS/2 создать — ничего не вышло.

A1: Ты динамически собиpаешься линковать или статически? Если
статически, тогда тебе пpосто declare func сделать и включить dll в
test.lnk.

Если динамически, то ты должен пpогpузить dll, получить адpес
функи и только после этого юзать. Я, в свое вpемя делал это чеpез
API OS/2: DosLoadModule DosQueryProcAddr DosFreeModule

Вот, специально накpопал за пять минут:

exe.c:
#define INCL_DOSMODULEMGR
#include

#define DLLNAME «DLL»

PFN Dllfunc;
char FuncName[]=»RegardFromDll_»;

void main()
<
HMODULE MHandle;

DosLoadModule( LoadError, sizeof( LoadError ), DLLNAME, &MHandle );
DosQueryProcAddr( MHandle, 0, FuncName, &Dllfunc );
(*Dllfunc)();
DosFreeModule( MHandle );
>
———————————————————
dll.c
#include

Dll’ка в текущей диpектоpии (котоpой, кстати в LIBPATH’е)

A2: Когда компиляешь свою DLL, то добавь свич -bd, который
создаст в .obj такое дело, как __DLLstart_. После этого все
заработает (во всяком случае у меня заработало):

wpp386 -bd -4s -ox dll.cpp

Q: Как подавить ваpнинги о неиспользованных аpгументах?

A1: Если используешь плюсовый компилер — просто опускай имена
параметров, например: void foo( int bar, char* ).

A2: #pragma off(unreferenced)

A3: Используй макрос:

#ifndef NU
#ifdef __cplusplus
#ifdef __BORLANDC__
#define NU( ARG ) ARG
#else
#define NU( ARG ) (void)ARG
#endif
#else
#define NU( ARG ) ARG=ARG
#endif
#endif

A4: Для многих, особенно юниксового пpоисхождения, компайлеpов pаботает
/*ARGSUSED*/ пеpед опpеделением функции.

Q: Подскажите плз, как в watcom’e увеличить число открытых файлов?

A: См. TFM. _grow_handles( int newcount ).

Q: Как заставить 16-ти битные OS/2 задачи видеть длинные имена файлов?
A: Опция newfiles для линкеpа.

Q: Что-то у меня Dev.Toolkit for OS/2 Warp к Ваткому WC10.0
прикрутить не получается. Говорит definition of macro ‘_Far16’ not
identical previos definition.

A1: Воткни где-нить определение __IBMCPP__ — или -D__IBMCPP__
в командной строке или #define перед #include .

A2: Для ваткома 10.5a надо не просто -d__IBMCPP__, а -d__IBMCPP__=1

Q: Пишу: printf ( «*» );, а он сpазу ничего не печатает. Что делать?

A: В стандаpте ansi, насколько я помню, чёткого опpеделения как должны
буфеpизовываться потоки stdin/stdout/stderr нет, если не изменяет мне память,
то ноpмальным является поведение со стpочной буфеpизацией stdout/stdin, всякие
дpугие дос-компилеpы обычно не буфеpизуют stdout совсем, что тоже ноpмально.
Пpизнаком конца стpоки в потоке является ‘n’, именно пpи получении этого
символа пpоисходит flush для line buffered потока. Выходов два: отменить
буфеpизацию или писать ‘n’ в нужных местах. Можно fflush(stdout) звать, тоже
ваpиант. Буфеpизация отменяется setbuf(stdout,NULL) или
setvbuf(stdout,NULL,_IONBF,0).

Q: Где можно купить легальную копию WatcomC/C++ ? Говоpят, что
Ваткомовцы откpыли в Москве свое пpедставительство. Так ли это?

A1:
Россия,
123100 Москва,
1-й Красногвардейский проезд д. 9
Sybase CIS
Тел.: +7(095)956-2020
Факс: +7(095)956-2041
e-mail: post@sybase.ru
Менеджер отдела поддержки — Я (Владимир Сенков/Doctor Hangup)

A2: Контора называется CPS, телефоны дали такие: 930-6203,
930-0591, 930-0516, в SyBase сказали, что там можно сделать Upgrade
WC 10.0 сразу на WC 10.6

A3:
Sybase в Укpаине :
Киев
тел/факс. 227-3230, 227-0177, 227-4344
e-mail: sybase@gu.kiev.ua

— экстендеры и связанные с ними проблемы ——-

Q: Можно ли сделать встроенный в ехе-шник DOS4GW, как в D00M ?

A1: Легально — нет. Предыдущие версии позволяли просто скопировать:
copy /b dos4gw.exe + a.exe bound.exe,
но сейчас (начиная с версии 10.0а) это не работает и для этой цели
нужно приобрести dos4gw/pro у фирмы Tenberry Software.

A2: Нелегально — да. Существует утилита dos4g/link, написанная
Сергеем Романовским (2:5020/236.12) для автоматизизованного
выдирания и вклеивания экстендеров из/в EXE файлов. Помещалась в
WATCOM.C в uuencode и доступна от автора.

A3: Нужно взять не тот DOS4GW, что в комплекте (DOS4GW 1.97), а
Pro-версию (DOS4GW Professional). Выдрать можно из DOOM, HERETIС,
HEXEN, WARCRAFT2 и т.д., где он прибинден. Причем можно найти 2
разновидности Pro 1.97 — одна поддерживает виртуальную память,
другая нет и еще что-то по мелочи. Различаются размерами (который
с виртуалкой — толще, где-то 270 кил, точно не помню). Прибиндить
можно разными тулзами, я пользуюсь PMWBIND из комплекта PMODE/W.

A4: Способ 1. (без вспомогательной тулзы) Нужно отрезать у
dos4gw.exe последние несколько байт с хвоста, содержащие строку
WATCOM patch level [. ]. Далее обычным бинарным копированием: copy
/b dos4gw.exe myexe.exe mynewexe.exe. Работоспособно вплоть до
версии DOS/4GW 1.95. В версии 1.97 введена проверка на внедренность
linexe в хвост экстендера.

Способ 2. (с использованием тулзы) Существует родной биндер для
DOS/4GW (ссылки на него я слышал от Леника Теренина), в какой-то
мере может помочь pmwbind.exe от PMODE/W (однако версия 1.16 не
понимала каскадный формат DOS/4GW, работоспособна для
одномодульного 4GW/PRO); решает проблему тулза dos4g/link, которая
доступна у автора (see origin :-) или у модератора. Рекомендую
попробовать 4GWPRO (выдрать из игрушек с помощью pmwbind.exe или
dos4g/link), усеченный вариант DOS/4GW (в модулях 4grun.exe, wd.exe
— для ДОС), а также PMODE/W.

A5:
В поставке DOS4G есть 4GBIND.EXE (Но для этого надо купить или укpасть DOS4G)

Q: Как определить количество свободной памяти под dos4gw? Попытки
использовать _memavl и _memmax не дают полную каpтину.

A: Количество свободной памяти под экстендером — не имеет смысла,
особенно если используется своппинг. Для определения наличия
свободного RAM нужно использовать функции DMPI, пример
использования есть в хелпе.

Q: О моделях памяти. Как я понял из объяснений — для pаботы можно
поставить /mf, после чего (т.к. указатели 32-битные) можно
совеpшенно свободно делать new buffer[1 000 000 000]. (пpобелы
вписал я — т.е. хапаю памяти около метpа). И что — потом адpесация
по данному буфеpу будет идти без гемоppоя ?

A: Обычную, 16-ти битную смолл модель понимаешь? 64К там же легко
адpесуется? Ну и так же тут, только указатели уже 32-бита и
пpостpанство соответственно — 4GB.

Q: И так только под flat, или можно на дpугие (кpоме large)
вешаться ? Т.е. — /ms, /mm, mc?

A: /ms пpактически эквивалентно /mf. Medium & Compact точно так же
как и в 16-ти битной модели, только оффсетная часть указателей — 32
pазpяда, а указатель целиком — 48 бит. Не знаю уж зачем такое
можеть быть надо. Не могу пpедставить задачу для котоpой может быть
нужно более 4 Гиг кода и/или данных.

Q: Как добраться до конкретного физического адреса под экстендером?

A: Вспомни пpо линейную адpесацию в dos4gw. Он в этом плане очень
пpавильно устpоен — например, начало сегмента 0xC000 находится по
линейному адpесу 0x000C0000.

Вот пpимеpчик, котоpый печатает сигнатуpу VGA биоса.

#include
#include
#include

void main( void )
<
unsigned i;
for( i = 0; i short :)

Q: Ватком ругается на стандартные библиотечные функции, в то время
как BC жует их нормально, что делать?

A: Большинство программ, которые нормально работали под BC, будут
нормально компилироваться и Ваткомом, нужно лишь немного изменить
код, использующий специфичные функции, реализованные в BC, как
расширение стандартной библиотеки. Для большинства таких функций
есть аналогичная или подобная функция. Например, вместо gettime()
следует использовать dos_gettime(), вместо findfirst —
dos_find_first, и так далее. Обратитесь к хелпу по BC, вы наверняка
найдете имена аналогичных функций, запросив помощь по тем именам,
которые не устроили компилятор Ваткома. Кроме того, следует
помнить, что например random(num) не является стандартной функцией,
а это просто макрос из stdlib.h, и вместо него можно использовать
конструкцию типа (rand() % num).

Q: Можно ли перенести под Ватком программы, написанные с
применением OWL или TVision?

A: OWL — скорее всего нет, поскольку он построен на расширениях
синтаксиса, которые не обрабатывается компилятором Ватком. Для
переноса TVision есть несколько вариантов,

Существуют diffы для пpеобpазования TV под GNU C++ (продукт
называется GVISION. Это не pешает pазом все пpоблемы, естественно,
но по кpайней меpе этот вариант TV заточен под 32 бита и флат
модель.

Совсем недавно стали доступны аж два поpта TV под Watcom C++.
Пеpвый — это пеpенос под полуось и dos4gw TV 1.0, выполненный
Ильфаком Гильфановым и доступный на 2:5020/758 под алиасом TVOS32.

Втоpой доступен на Укpаине: 2:461/515 (9:00-18:00) (если есть
Искра-2, то тел. (Сумы)06-297). Файл TVWATCOM.ZIP, 179k. Внутри
ма-ахонькая дока и собственно сырец+makefile. Доку рекомендую
внимательно прочесть — может пригодится при перекомпиляции ваших
программ.

Q: В моей программе используются inline ассемблер и псевдорегистры,
смогу ли я заставить их работать под Ваткомом?

A: Нет. Придется переписать на встроенном ассемблере, либо вынести
в отдельный .asm модуль.
A2:
с 11 веpсии поддеpживает стиль a la Borland :
_asm

Q: А нeльзя ли кaк-нибyть нa вaткoмe peaлизoвaть _AX из Borland?
А тo пepeнoшy пoд нeгo библиoтeкy, a тaм oни aктивнo юзaютcя.

A: Если тебе _AX нужен на read-only, то можно сделать пpозpачно:

=== Cut ===
short reg_ax ( void ) ;

#define _AX reg_ax()

#pragma aux reg_ax =
value [ax]

#if defined( __386__ ) || defined( __FLAT__ )
int reg_eax ( void ) ;

#define _EAX reg_eax()

#pragma aux reg_eax =
value [eax]

#define rAX reg_eax() // чтобы не задумываться об контексте
#else
#define rAX reg_ax()
#endif
=== Cut ===

А если для модификации, то лучше не полениться и сделать как пpосит
Ватком (то бишь офоpми этот фpагмент как inline-asm).

Q: Как мне отлаживать динамически подключаемую DLL в виндовом
отладчике ? А то я уже упарился тыкать Alt+F после загрузки этой
DLL. В глупом и глюкавом борланде это делалось простым добавлением
нужной DLL в список модулей.

A: А что, есть пpоблемы? Стpанно. Я сейчас винды не пpогpаммиpую,
но когда-то он сам вполне цеплял DLL и выуживал отладочную
инфоpмацию. Единственное, он не всегда сpазу ее цепляет. Если вошел
в DLL, а отладчик не видит соpса, попpобуй не неpвничать, а
тpассануть пяток инстpукций. Он синхpонизиpуется и покажет соpс.

Q: Встpечается пpоблема, когда надо собиpать смешанный пpоект —
часть модулей компилится Ваткомом, а часть Боpландом (напpимеp
ассемблеpом). Линкеp падает по тpапу, вываливается с бpедовыми
ошибками и вообще ведет себя плохо.

A1: На худой конец есть способ:
боpландовый obj->wdisasm->.asm->wasm->ваткомовский obj
А дальше это отдавать как обычно wlink’у.

A2: Есть еще наpодное сpедство — нужно взять tasm 3.2, а еще лучше
tasm 4.0, последний хоpош тем, что имеет pежимы совместимости по
синтаксису со всеми своими пpедками.
Или TASM32 5.0 с патчем ( обязательно 32 bits . )

—— Optima (Watcom в упаковке для виндов) ——

Q: Optima++ 1.0.
Пpи задании надписей заголовков окон, меню, кнопок и т.п. на pусском языке
все пpекpасно видно пока я нахожусь в pежиме дизайнеpа. Стоит только
запустить созданную аппликуху — киpиллица исчезает напpочь.

Введение в C


История

Язык программирования C был разработан Деннисом Ритчи (Dennis Ritchie) в 1972 году для операционной системы UNIX. Спустя годы язык стал доступен на многих других системах, удовлетворяя потребности программистов, желающих разрабатывать программы, которые могут работать на различных платформах.

Так как тогда язык C не был формально определён, то каждая реализация языка имела свои особенности и расширения. В результате цели переносимости не были достигнуты.

В 1982 году Американский Национальный Комитет Стандартов (ANSI) образовал Технический Комитет X3J11 по языку программирования C, чьей целью было формальное определение языка C, его библиотечных функций и взаимодействия с окружением времени выполнения. Стандарт языка C был введён в 1989 году.

Компиляторы Watcom C/16 и C/32 образовались в результате развития технологии генерации кода для процессоров 8086, которую разрабатывали компания Watcom и университет Ватерлоо начиная с 1980 года. Первый компилятор Watcom C/16 вышел в свет в 1988 году. Первый компилятор Watcom C/32 — в 1989 году.

Использование

C иногда называют языком «низкого уровня», имея в виду, что C–программисты часто думают в терминах битов, байтов, адресов и других, относящихся к программированию на языке ассемблера.

Но C также часто называют языком программирования «общего назначения». Кроме доступа к основным компонентам компьютера, он предоставляет возможности присущие языкам «высокого уровня». Структурированное программирование, структуры данных и модульное программирование (недавние дополнения некоторых языков высокого уровня) — это части языка C начиная с момента его создания.

C предоставляет программисту возможность писать приложения на уровне близком к уровню языка ассемблера без знания языка ассемблера конкретной машины. Раньше и другие компиляторы предоставляли такую возможность, но приложения, которые получались, были «тяжёлыми», так как код, который производили эти компиляторы, не был так же хорош, как написанный хорошим программистом на ассемблере. С современной техникой генерации кода становится трудным, если не совсем невозможным, отличить программу, написанную человеком на языке ассемблера, от программы сгенерированной C–компилятором (основываясь на размере кода). Фактически, сейчас некоторые компиляторы генерируют код на уровне хорошего программиста на ассемблере.

Так для чего использовать C? Теоретически на нём можно писать всё, что можно писать на ассемблере. Другие же языки использовать для специальных задач, где они превосходят остальные.

C более близок к «системному программированию» (программированию операционных систем), к языкам программирования и инструментам, которые не попадают в класс «прикладного программирования». Классический пример — операционная система UNIX, разработанная Bell Laboratories. Она написана почти полностью на языке C и является самой переносимой операционной системой.

C также используют для написания программ, требующих большей эффективности, чем обычные приложения. Типичным примером служат интерпретаторы и компиляторы языков программирования.

Другой областью, где часто используется C, является разработка крупномасштабных программ, таких как СУБД, электронные таблицы, текстовые редакторы и т.д. Это требует высокой эффективности и компактности, так как часто они являются наиболее используемыми отдельным человеком или компанией, и, следовательно, требуют больших ресурсов компьютера.

Может показаться, что C в основном используется для создания коммерческих продуктов, но его можно использовать для написания любого приложения требующего высокой эффективности. Например, большая система управления транзакциями может быть написана на COBOL’е, но чтобы выжать еще немного скорости, её можно переписать на C. Это приложение может быть написано и на ассемблере, но в настоящее время многие программисты предпочитают избегать писать на столь низком уровне, в то время как компилятор C может сгенерировать достаточно эффективный код.

И наконец, конечно, основная причина писать программу на C это то, что она сможет работать после больших или меньших переделок на любой системе, где есть компилятор C. Раньше, из-за быстрого роста количества C–компиляторов и отсутствия стандарта, определяющего их разработку, это было гораздо труднее. Ныне, при наличии стандарта ANSI на язык программирования C, программа, написанная в соответствии со стандартом, может быть перенесена на другой компилятор с минимальными переделками. Конечно, частности, вроде имён файлов, распределения памяти и синтаксиса командной строки отличаются на разных системах, но в правильно разработанном приложении на C эти части выделены в отдельные «системно-зависимые» файлы, которые могут быть заменены для конкретной системы. (Подробнее см. Написание переносимых программ.)

Преимущества

C имеет несколько основных преимуществ по сравнению с другими языками программирования.

    Большинство систем имеют C–компилятор.

Поставщики компьютерных систем хорошо представляют себе, что успех системы зависит от доступности для неё программного обеспечения. Из-за наличия большого количества программ на C большинство поставщиков предлагают компилятор C, поощряя тем самым перенос этих программ на их системы. Для систем у которых отсутствует компилятор C, его могут разработать независимые компании.

После разработки стандарта ANSI тенденции ко всеобщему распространению C–компиляторов возможно усилятся.

C–программа может быть легко перенесена на любой компьютер и операционную систему.

Многие языки программирования претендуют на переносимость. Языки FORTRAN, COBOL и Pascal имеют описывающий их стандарт, поэтому программа, написанная полностью в соответствии с определениями стандарта, скорее всего будет переносима. Это истинно и для C. Однако мало языков могут совместить переносимость с другими преимуществами C, включая эффективность генерируемого кода и возможность работать на уровне близком к машинному.

Программы написанные на C очень эффективны и по скорости исполнения, и по размеру кода.

Мало языков могут сравниться с C по эффективности. Хороший программист на ассемблере может сделать код лучше, чем компилятор C, но он (или она) затратят значительно больше времени на разработку приложения, потому что при программировании на ассемблере гораздо проще сделать ошибку. Компиляторы для других языков могут производить эффективный код для приложений своего профиля, но мало какие делают это во всех случаях.

C–программы могут работать на аппаратном уровне, управляя устройствами напрямую, если это необходимо.

Большинству программ эта возможность не нужна, но, при необходимости, программа может использовать особые возможности компьютера. Например, программа может использовать некоторое значение, находящееся по фиксированному адресу в памяти. Этого просто достигнуть на C, и сложно на других языках. (Конечно, если программа разработана как переносимая, то эта часть кода будет изолирована и помечена как зависимая от операционной системы.)

C–программы просто сопровождать.

Код на ассемблере труден для сопровождения, что вызвано очень низким уровнем программирования (регистры, адресация, ветвления). Программы на C обеспечивают сравнимую функциональность, но на более высоком уровне. Программист по-прежнему думает в терминах возможностей машины, но без необходимости точного знания работы аппаратуры, что позволяет ему сконцентрироваться на разработке программы, а не на деталях кодирования конкретного компьютера.

C–программы просты для понимания.

«Просты», конечно, — относительное понятие. C–программы определённо проще для понимания, чем эквивалентная программа на ассемблере. Другой язык может быть проще для понимания в каком-либо конкретном случае, но обычно C — хороший выбор.

Все перечисленные выше преимущества имеют место независимо от приложения, а также от аппаратного обеспечения или операционной системы, на которых оно исполняется.

Это наибольшее преимущество. Так как программы на C переносимы и C предназначен не только для какого-то определённого класса приложений, то часто он — лучший выбор для разработки приложения.

Для чего эта книга

Эта книга — описание языка программирования C, реализованного компиляторами Watcom C/16 и Watcom C/32 для процессоров 80×86. Здесь сделана попытка дать простое для чтения описание языка C. Стандарт ANSI C — последняя инстанция в деталях языка, но он описывает язык в пределах, которые должны быть охвачены каждой реализацией компилятора.

В этой книге делается попытка описать язык C в общих границах, а также специфические возможности, про которые в стандарте говорится «реализационно-зависимые».

Текст выделенный таким шрифтом описывает особенности, реализованные в компиляторах Watcom C/16 и Watcom C/32.

Программисты, пишущие программы, которые будут переноситься на другие системы, должны обратить особое внимание при использовании этих возможностей, т.к. другие компиляторы могут работать по-другому. Насколько возможно, сделана попытка описать другое подобное поведение.

Эта книга не описывает ни одной из библиотечных функций, которые программа на C может использовать для взаимодействия со своим окружением. В частности, в этой книге не описаны ввод и вывод. Язык C не содержит в себе возможностей ввода/вывода. Руководство «Watcom C Library Reference» описывает все библиотечные функции, включая используемые для ввода и вывода.

Глоссарий включён в приложение и содержит все термины, используемые в книге.

ВВЕДЕНИЕ

компилятор задача инструмент

Для решения вычислительных задач немаловажной является проблема выбора инструмента. При вычислениях с использованием бинарного кода важно, чтобы код был оптимальный по затратам вычислительных ресурсов и ресурсов памяти. Помимо этого обнаружилась серьезная проблема времени компиляции исходного кода. Так, в некоторых комбинаторных задачах, где используются тысячи многократно вложенных циклов, некоторые компиляторы отказываются компилировать. В связи с этим актуальной является проблема выбора «правильного» компилятора. Практическая значимость нашей работы заключается в проведении тестов, изучении компиляторов и выборе наиболее подходящего. В рамках работы мы ограничились наиболее известными компиляторами языка С++. Для исследования мы выбрали несколько компиляторов, такие как: MinGW, Borland Builder, Intel C++ Professional Edition, Watcom и Visual Studio. Для начала рассмотрим их описание на сайтах-производителях.

Обзор компиляторов

MinGW

Информация взята с сайта [1]. MinGW, сокращенно «минималистский GNU для Windows», является минималистической средой разработки для родных приложений Microsoft Windows.

MinGW предоставляет полный программный пакет с открытым исходным кодом, который подходит для развития собственных приложений MS-Windows, и которые не зависят от любых третьих сторон C-Runtime DLL (только Microsoft C библиотеки, MSVCRT).

MinGW компиляторы обеспечивают доступ к функциональности среды Microsoft C Runtime и некоторым специализированным-языковым библиотекам.

Мы использовали версию 3.4.5, команда компилирования g++.

Borland Builder

Информация взята с сайта [2]. Embarcadero ® C++ Builder ® XE является единственным настоящим RAD C++ инструментом и компонентом программного обеспечения, предназначенного для ультрабыстрой разработки высоко-сопровождаемых Windows приложений с графическим интерфейсом для Windows и основных платформ.

Мы использовали версию 6.10, команда компилирования bcc32.exe

Watcom

Информация взята с сайта [4]. Open Watcom является проектом с открытым исходным кодом для поддержания и укрепления Watcom C, C++, Fortran кросс-компиляторов и инструментов. Лицензии Open Source от Sybase позволяет свободное коммерческое и некоммерческое использование Open Watcom.

Open Watcom компилятор имеет ряд преимуществ перед другими свободными компиляторами, такие как полная поддержка 16-битных DOS, Windows.. Open Watcom C/C++ компилятор в свободном доступе, компилятор для 16-битных Windows и OS / 2 устройств. Наконец, Open Watcom это комплексный пакет, легкий в установке и использовании, с полным набором инструментов и документации.

Мы использовали версию 1.9, команда компилирования wcl386.

Компилятор Си в одну инструкцию: обзор инструмента M/o/Vfuscator

M/o/Vfuscator компилирует программы в инструкции mov , и только в них. Инструмент ориентирован на язык Си и архитектуру процессора x86, но адаптивен и легко настраивается под другие языки и архитектуры.

Демонстрация

Компиляция функции, вычисляющей простые числа, с помощью M/o/Vfuscator в сравнении с GCC:

Язык Ассемблера

Граф потока управления

M/o/Vfuscator в действии

movcc prime.c -o prime

Пример поинтереснее

movcc nibbles.c -o nibbles -lncurses

Сборка

M/o/Vfuscator использует LCC в качестве препроцессора. Предлагаемый скрипт сборки автоматически загружает LCC, настраивает его конфигурацию для MOV и собирает M/o/Vfuscator.

Если вы проводите сборку на 64-битной системе, убедитесь, что у вас есть доступ к 32-битной стандартной библиотеке (например, apt-get install libc6-dev-i386 или yum install glibc-devel.i686 ).

Тестирование

Проверьте, что сборка произошла корректно, с помощью следующего скрипта:

Использование

Компилируйте программы как обычно.

Всю остальную необходимую информацию можно найти в репозитории проекта на GitHub.

Watcom C/C++

Watcom C/C++ — звезда прошлого. Основные черты: многоплатформенность и качество кода. В лучшие времена генерировал код для DOS real mode, DOS protected mode (DOS/4G, DOS/4GW, Phar Lap), Win16, Win32, Win32s, QNX, OS/2 (16- & 32-bit), Netware NLM. Причем, работая под любой системой, можно было генерировать код для всех остальных (к примеру, программу под Win32 можно было скомпилировать и слинковать из-под OS/2 и т.д.). Watcom стал весьма популярен во времена DOS-игр, работающих в защищенном режиме (DOOM и пр.).


К моменту появления версии 11.0 (1997 г.) фирма, разрабатывавшая Watcom, была куплена Sybase Inc., и это, к сожалению, возвестило о кончине компилятора. Дальнейшая разработка была практически заморожена, а в 1999 г. Sybase Inc. объявила о прекращении продаж и установила крайний срок, после которого будет прекращена и техническая поддержка для тех, кто еще успел купить компилятор (это было 30 июня 2000 г.). В 2000 году было принято решение открыть исходные коды компиляторов и начать открытую разработку. В связи с этим возник проект заменивший Watcom C/C++ — Open Watcom C/C++.

Последняя версия компилятора не поддерживает namespaces и не содержит STL. Впрочем, существуют многие реализации STL, поддерживающие Watcom C++ (например, STLPort ).

Под любую поддерживаемую систему есть набор стандартных утилит: компиляторы, линкер, отладчик(и), make, lib, strip и пр. В системах с GUI (OS/2, Windows) есть также IDE (хотя и не очень удобная).

И напоследок стоит еще раз напомнить про то, что компилятор более не развивается и не поддерживается. Имеющиеся проблемы никуда не денутся и не будут теперь решены.

Обзор c/c компиляторов emx и watcom

История компилятора уходит в далёкий 1965 год, когда четверо студентов Университета Ватерлоо [4] в Канаде под руководством профессора за три месяца работы создали компилятор Фортрана WATFOR. [5] Он работал на платформах IBM 7040, IBM System/360 и DEC IBM PC, которая поддерживала стандарт Фортран 77. Через год была образована фирма Watcom, которая в 1988 году представила компилятор C.

Компиляторы Си и C++ ценились разработчиками программ под защищённого режима процессоров Intel 80386. В середине 1990-х некоторые культовые игры под DOS, такие как Descent, Duke Nukem 3D, Warcraft II были скомпилированы Watcom C.

В 2003 году, после проблем с новой версией компилятора, а также невозможностью конкурировать с фирмой Sybase, которая приобрела Watcom в 1995 году, решила открыть исходные коды компиляторов. Так был создан проект Open Watcom под эгидой фирмы SciTech Software. [6] В настоящее время проект развивается самостоятельно. К сожалению Open Watcom компилятор не полностью поддерживает стандарт С++, что не позволяет считать его полноценным С++ компилятором и мешает его широкому использованию.

Хотя Sybase больше не продаёт компиляторы Watcom, они доступны как пакет открытого программного обеспечения OpenWatcom с помощью компании SciTech.

Дата Продукт Примечания
1984 Waterloo C для S/370
1985 Начата работа над основой нынешнего кодогенератора
1988 Watcom C 6.0
  • Работа под и генерация кода только для DOS
  • Включены отладчик и набор библиотек времени исполнения
  • Порождаемый код лучший среди компиляторов того времени
1989 Watcom C 7.0
1989 Watcom C 7.0/386
  • Первая 32-битная версия, только под и для DOS
  • Поддержка расширителя DOS от Phar Lap
  • Не включены компоновщик и отладчик
1990 Watcom C 8.0
1990 Watcom C 8.0/386
  • Добавлены компоновщик, библиотекарь, отладчик и профайлер
  • Добавлена графическая библиотека
1991 Watcom C 8.5
1991 Watcom C 8.5/386
  • Поставка с расширителем DOS DOS/4GW
  • Поддержка Windows 3.0 (расширитель Win386)
  • Поддержка Юникода
  • Добавлены исполняемые модули для работы под OS/2
1992 Watcom C 9.0
1992 Watcom C 9.0/386
  • Работа под и генерация кода для OS/2 v2.00
  • Добавлена оптимизация кода для процессора 80486
  • Поддержка базированных указателей (based pointer)
Watcom C 9.01/386
  • Поддержка Windows 3.1
1993 Watcom C/C++ 9.5
1993 Watcom C/C++ 9.5/386
  • Добавлен компилятор C++
  • Добавлена оптимизация кода для процессора Windows NT
1994 Watcom C/C++ 10.0
  • Включена библиотека MFC
  • Поддержка предкомпилированных заголовков (англ.)
  • 16- и 32-битные утилиты объединены в единый пакет
  • Переработанный отладчик
  • Добавлен браузер классов C++
  • Добавлен редактор ресурсов Windows
  • Графическая среда разработки под Windows и OS/2
1995 Watcom C/C++ 10.5
  • Обработка исключений C++ под OS/2 и Win32
  • Поддержка Windows 95 и NT 3.5
  • Возможность удалённой отладки по TCP/IP
1996 Watcom C/C++ 10.6
  • Structured exception handling в C
  • Улучшенная совместимость с компиляторами
  • Поддержка namespace, RTTI и приведение типов в новом стиле в компиляторе C++
  • Поддержка 64-битных целых чисел
  • Библиотечная поддержка многобайтных знаков
  • Поддержка инкрементальной компоновки
  • Поддержка в компоновщике и билиотекаре форматов объектных модулей COFF и ELF
  • Добавлены клоны утилит Microsoft (с тем же названием, списком опций и функциональностью)
  • Добавлены утилиты в виде
1998 Watcom C/C++ 11.0B
1999 Sybase уведомляет об окончании выпуска (англ.) (end-of-life) Watcom C/C++ 11.0
2000 Sybase анонсирует открытие исходных кодов для утилит Watcom
2001-09-27 Watcom C/C++ 11.0c Beta
2002-12-21 Watcom C/C++ 11.0c
2003-01-28 Open Watcom 1.0
2003-08-12 Open Watcom 1.1
2004-01-07 Open Watcom 1.2
2004-08-03 Open Watcom 1.3
2005-12-14 Open Watcom 1.4
2006-04-26 Open Watcom 1.5
2006-12-15 Open Watcom 1.6
2007-08-18 Open Watcom 1.7
2007-10-23 Open Watcom 1.7a
2008-02-21 Open Watcom 1.8

Платформы

Исходный код компиляторов портабелен и, подобно многим другим свободным компиляторам, вроде gcc, их кодогенератор (backend) можно настроить на другую целевую платформу.

Компиляторы могут работать под управлением (host — платформа разработчика) и компилировать исполнимый код для (target — целевая платформа) операционных систем OS/2 и Windows. Поддерживается также создание модулей NLM (англ.) для Novell NetWare.

Идёт работа по портированию компиляторов под операционные системы [7] и последние версии FreeBSD), работающие на платформах PowerPC и других.

Open Watcom C/C++ версии 1.4, выпущенный в декабре 2005 года, имеет экспериментальную поддержку Linux x86 как целевой платформы. Имеется код для ныне неподдерживаемой версии

Тест Си компиляторов под Windows

После многочисленных споров на тему «Какой компилятор лучше генерирует код», появилась идея провести самому испытания. Основной целью испытания была проверка скорости работы программы с оптимизацией по скорости. Результат тестирования: среднее арифметическое время выполнения тестовой функции в миллисекундах (1/1000 сек). т.е. чем меньше тем лучше.

В тестировании участвовали:

  • Intel C++ Compiler Pro 11.1.054;
  • GCC 4.5.0 (MinGW);
  • MS C/C++ Compiler 15.00.21022.08 (VS 2008);
  • CodeGear C++ Builder 11.0 (C++Builder 2007);
  • Tiny C Compiler 0.9.25.

Железо для теста:

  • Компьютер: CPU Intel E5200 (2-ядерный) 2.5 Ггц + 2 Гб ОЗУ;
  • Ноутбук: CPU AMD Athlon QL-62 (2-ядерный) 2 Ггц + 3 Гб ОЗУ.

ОС для теста:

MS Windows XP SP3 Eng x32 на ноутбуке и на компьютере (с одного диска устанавливались и один и тот же SP3 ставился).

Варианты компиляции:

  1. Отключена любая оптимизация;
  2. Включена вся возможная оптимизация.

Ограничения на тестирование:

  • Исходный код тестовой программы не изменяется в зависимости от компилятора;
  • Тестовая функция не использует функции системы, т.е. только вычислительные операции, все функции связанные с вызовом системных функций вызываются до и после замера времени;
  • Не используются библиотеки распараллеливания типа OpenMP;
  • Вычисления производятся только в одном потоке;
  • Компьютер не загружен больше никакими другими программами, только запущенная Windows + Notepad + тестовая программа;
  • Для тестов не использовалась VCL, MFC, CLR, ATL;
  • Код программ компилировался именно как С код, а не С++;
  • Для Tiny C Compiler использовался только 1 вариант компиляции, потому что он не поддерживает оптимизацию на уровне кода. Из документации: Оптимизация кода ограничена вычислением константных выражений на этапе компиляции, заменой операций умножения и деления операциями сдвига где это возможно, а также некоторыми другими действиями. Оптимизация переходов не производится, так как это потребовало бы организацию промежуточного кода в более абстрактном виде.

Метод тестирования:

  1. Выделение памяти для буферов;
  2. Получение UserTime текущего потока через GetThreadTimes;
  3. Выполнение тестовой функции;
  4. Получение UserTime текущего потока через GetThreadTimes;
  5. Получение разницы во времени с точностью до миллисекунд (1/1000 сек);
  6. Повторение последних 4-х действий 10 раз;
  7. Вычисление среднего арифметического значения времени.

Алгоритм вычислительной функции:

  1. Инициализация ключевой последовательности для алгоритма шифрования RC4;
  2. Инициализация ключевой последовательности для алгоритма шифрования AES-128;
  3. Заполнение первого тестового буфера данными полученными из генератора RC4;
  4. Вычисление CRC32 для первого тестового буфера;
  5. Шифрование первого тестового буфера алгоритмом AES-128, блоками по 128 бит, с помещением результата во второй тестовый буфер;
  6. Заполнение первого тестового буфера данными полученными из генератора RC4, т.е. первоначальные данные затираются полностью;
  7. Расшифровка второго тестового буфера с помещением результата в первый тестовый буфер;
  8. Подсчет CRC32 для расшифрованного первого тестового буфера;
  9. Сравнение CRC до шифрование и после.

Параметры теста:

  • Кол-во данных для шифрования — 1600 килобайт (102400 блоков);
  • Кол-во тестовых итераций для вычисления среднего арифметического значения времени — 10.

Результаты тестирования:
Intel C++ Compiler Pro 11.1.054

  • Ноутбук без оптимизации: 6301 мс;
  • Ноутбук с оптимизацией: 971 мс;
  • Компьютер без оптимизации: 4541 мс;
  • Компьютер с оптимизацией: 867 мс.

GCC 4.5.0 (MinGW)

  • Ноутбук без оптимизации: 6568 мс;
  • Ноутбук с оптимизацией: 1691 мс;
  • Компьютер без оптимизации: 4979 мс;
  • Компьютер с оптимизацией: 1521 мс.

MS C/C++ Compiler 15.00.21022.08 (VS 2008)

  • Ноутбук без оптимизации: 5149 мс;
  • Ноутбук с оптимизацией: 1574 мс;
  • Компьютер без оптимизации: 3740 мс;
  • Компьютер с оптимизацией: 1290 мс.

CodeGear C++ Builder 11.0 (C++Builder 2007)

  • Ноутбук без оптимизации: 4982 мс;
  • Ноутбук с оптимизацией: 3854 мс;
  • Компьютер без оптимизации: 4006 мс;
  • Компьютер с оптимизацией: 3185 мс.

Tiny C Compiler 0.9.25

  • Ноутбук: 6275 мс;
  • Компьютер: 4606 мс.

Более наглядно:График времени выполнения кода: График скорости выполнения кода относительно лидера теста (лидер теста — 100%)

Итоги:
По результатам тестирования на оптимизацию по скорости, компиляторы занимают следующие места:

  1. Intel C++ Compiler Pro 11.1.054;
  2. MS C/C++ Compiler 15.00.21022.08 (VS 2008);
  3. GCC 4.5.0 (MinGW);
  4. CodeGear C++ Builder 11.0 (C++Builder 2007);
  5. Tiny C Compiler 0.9.25.

Как видно, ребята из Intel хорошо постарались (на 32% код работал быстрее чем у ближайшего соперника) и их код имеет отличную оптимизацию не зависимо от того что он работает на Intel или AMD процессоре.

В тоже время С++ Builder показал себя не с лучшей стороны (отставание в 2 раза), что свидетельствует о чуть другой специфики его применения.

Ну а про Tiny C Compiler 0.9.25 и речи не может быть, потому что он вообще не поддерживает оптимизацию переходов, вот и выходит, что скорость выполнения программы находится на уровне с другими компиляторами без оптимизации при компиляции.

Конечно С++ Builder оказался чуть староват потому что не нашел я у себя более свежей версии. Хотя мне кажется, там мало что изменилось в этом плане.

Заключение
По результатам тестирования нельзя судить о компиляторе, что он хорош или плох, потому что каждому своё применение, а можно лишь говорить о том, какой их них подойдет для создания программных продуктов связанных с вычислительными операциями.

«Кодовый» беспредел

Как и каламбур, программирование — это игра слов.
Алан.Дж.Перлис

Еще один блог ;-) программиста-любителя о PHP, кросс-платформенной среде разработки Qt, интернете и прочем, что будет заслуживать внимание.

четверг, 21 апреля 2011 г.

Бесплатные компиляторы C++ и интегрированные среды разработки ( >

Не секрет, что весь мир программного обеспечения, условно, можно разделить на 2 категории: платное ПО и бесплатное ПО. Кто-то является сторонником бесплатного, кто-то имеет деньги на платное, а кто-то крутиться как может и пользуется всякими крэками и генераторами ключей. По своей природе я человек законопослушный, поэтому и выбор мой останавливается на бесплатном софте (будь то проприетарное ПО или с открытым исходным кодом). Не стало это правило исключением и при выборе компилятора C/C++, а так же среды разработки. Что мною было обнаружено в просторах Интернета и с чем пришлось столкнуться я решил отобразить в этом очерке. Конечно профессионального разработчика я ничем не удивлю, но новичкам, возможно, смогу дать пару интересных ссылок :-). Итак .

Бесплатные компиляторы C/C++

GCC
http://gcc.gnu.org/
В мире Linux вы практически не встретите человека, который не знает что такое GCC. Расшифровывается сея аббревиатура как GNU Compiler Collection — набор компиляторов проекта GNU (фонд разработки СПО — свободного программного обеспечения). Да, да, именно набор, поскольку поддерживает несколько языков программирования (Ada, C, C++, Fortran, Java, Objective-C, Objective-C++, Go), хотя изначально это был исключительно компилятор языка C. Сейчас GCC, де-факто, стал штатным компилятором большинства операционных систем семейства Linux, но это не означает, что его применение ограничивается только этой ОС. Существуют версии GCC портированные и на иные операционные системы, например, проект MinGW — GCC под ОС семейства Windows. Использование этого компилятора удобно в случае, если планируется создавать кросс-платформенное приложение, либо использовать в своей программе библиотеки созданные в рамках сообщества разработчиков свободного программного обеспечения. Более подробно с историей развития, а так же плюсами и минусами GCC можно ознакомиться на русской странице WiKi. Ну и, конечно же, скачать данный компилятор, собранный для различных платформ (бинарные пакеты), можно со страницы загрузки GCC.

Microsoft Visual C++ Toolkit 2003
Есть у Microsoft не только Windows, но и оптимизирующий компилятор бесплатный :-) Хотя он уже и достаточно «старый» (как видно из названия — 2003 год), но применение находит у достаточного большинства программистов. В то далекое время компания MS позволила себе раздавать лишь консольный вариант компилятора, в противовес текущей ситуации, когда можно пользоваться хоть и урезаной в функционале, но все же IDE — Microsoft Visual Studio Express. И если Студию вы всегда можете скачать с сайта компании, то вот Visual C++ Toolkit 2003 вы там не найдете — лишь на просторах интернета (например, ТУТ ;-)). Посмотрим, что входит в состав пакета от 2003 года: это C/C++ компилятор и линкер (такой же, кстати, как был в Visual Studio 2003 Professional), библиотека стандартных шаблонов (STL) и .NET runtime — «джедайский» набор программиста под Windows :-).

Borland C++ Compiler 5.5
http://edn.embarcadero.com/article/20633
Ещё один «ветеран», способный одним названием внушить страх студенту-первокурснику ;-). В «лихие 90-е», не особо привру если скажу, что компания Borland занимала лидирующее положение в создании средств разработки. В то время если и подразумевалась IDE, либо компилятор под ОС Windows, то ими чаще являлись продукты компании Borland. Позже, конечно, пальма первенства была утеряна и взошли новые «звезды» на небосводе разработчиков, но теплая память о фирме подарившей миру одну из качественных реализаций компилятора C++ еще долго будет греть сердца :-) (только не надо развивать очередного холи-вара ;-)). Сейчас развитием линейки средств разработки занимается уже другая организация — Embarcadero Technologies, почитать о которой вы всегда можете на странице WiKi. Новые версии C++Builder они конечно же вам не дадут — только если за деньги :-), а вот последнюю версию компилятора, когда он еще принадлежал Borland, подарят безвозмездно — для этого нужно пройти по адресу: http://forms.embarcadero.com/forms/BCC32CompilerDownload где, заполнив анкету и указав реальный адрес e-mail, вы получите письмо с ссылкой для скачивания, либо, если у вас чертовски нет времени ;-), вы можете скачать его сразу ТУТ. В комплекте вы получите: сам компилятор, линкер, компилятор ресурсов, C++ Win32 препроцессор, утилиту для создания lib файлов из dll и другие «вкусности» для плодотворной работы на поприще создания программ под ОС семейства Win32.

Open Watcom
http://www.openwatcom.org/
Как гласит всё знающая Википедия: «Open Watcom — проект сообщества открытого кода по поддержке и развитию многоплатформных компиляторов Watcom C, C++ и Fortran и сопутствующих программ.» На этом бы можно было и остановиться в описании, но ради экономии вашего времени стоит сразу отметить, что хоть этот компилятор и генерирует компактный и быстрый код, но на текущий момент он не поддерживает полностью стандарт C++, поэтому выбирая его для своей работы не удивляйтесь если вдруг чей-то код не станет у вас собираться ;-). В отличии от всех представленных в данном обзоре компиляторов, Open Watcom заметно отличается наличием простого графического редактора, графического дебагера, редактора ресурсов и других утилит, по сути позволяя скачать пакет и тут же приступить к творчеству :-).

Digital Mars C++ Compiler
http://www.digitalmars.com/
Компилятор разрабатываемый одноименной компанией Digital Mars, известной своей разработкой нового языка программирования «D» (по замыслу автора, очевидно, должно было символизировать следующий шаг в развитии языков C/C++). Нашему вниманию на сайте разработчика предлагается либо купить полный набор программного обеспечения для написания программ на C/C++, который, помимо самого компилятора, содержит и графическую среду разработки совместно с дебагером, справку, различные библиотеки и т.д.; либо скачать совершенно бесплатно консольную версию компилятора — чем, собственно, он и заслужил наше внимание :-). Но особо не спешите радоваться создатели кросс-платформенных приложений — данный компилятор работает только в ОС Windows :-).

Это далеко не полный перечень известных компилятор для языков C/C++. Intel® C++ Compiler (для некоммерческого использования), AMD x86 Open64 Compiler Suite, Clang, Djgpp . список еще можно продолжить дюжиной примеров, но суть останется одной — при выборе компилятора необходимо всесторонне подойти к анализу возможностей и условий применения, которые накладывает использование того или иного продукта — дабы в процессе разработки не попасть в щекотливую ситуацию :-).

Бесплатные интегрированные среды разработки (IDE)

Dev-C++
http://www.bloodshed.net/devcpp.html
Поддерживаемая система: Windows 95/98/NT/2000/XP
Поддерживаемые компиляторы: семейства GNU GCC (MinGW, Cygwin)

— интегрированная отладка (используется GDB)
— менеджер проекта
— настраиваемый редактор кода с подсветкой синтаксиса
— просмотрщик классов
— автозавершение кода
— список функций
— поддержка профилей
— быстрое создание Windows-приложений, консольных программ, статичных библиотек и DLL (шаблоны)
— поддержка шаблонов, позволяющих создавать свои собственные типы проектов
— создание makefile’а
— редактирование и компиляция файлов ресурсов
— менеджер инструментов
— поддержка печати
— средства поиска/замены (забавно было бы их не обнаружить :-))
— поддержка CVS
Ну что вы уже загорелись желанием заполучить эту «лапочку»? ;-) Тогда смело качайте Dev-C++ либо wxDev-C++!

Еще один «старичок» :-) в полку IDE. Как видно из названия, работает с портированой версией GCC — MinGW, хотя в большинстве обзоров данную среду характеризуют как кросс-платформенную (к слову, на сайте текущей поддержки MinGW Developer Studio я так и не нашел ссылку на скачивание дистрибутива для ОС отличной от Windows). Честно скажу — сам не скачивал и не использовал в своей работе эту IDE, но группу пользователей она явно имеет :-). Если вы программировали на языке C++ в MS Visual Studio 6.0, то эта среда вам явно придется по душе, ибо автор MinGW Developer Studio при разработке интерфейса постарался повторить эту IDE от Microsoft. Существенным минусом является лишь то, что с 2005 года проект не разрабатывается, а с 2008 года даже перестал работать официальный сайт. Но мир не без добрых людей и, если вы все же заинтересованы в использовании MinGW Developer Studio, вы всегда можете скачать актуализированную версию с сайта VaulTec. Ничего нового, по сравнению с финальной официальной версией, конечно, там нет — гарантируется лишь работа с одной из последних версий MinGW.
Исходя из доступной информации, рассматриваемая среда разработки обладает следующими «плюшками»:
— интерфейс, поддерживающий работу с несколькими документами
— подсветка синтаксиса
— управление проектом (надо думать «менеджер проекта» :-)) с настройками для debug и release сборок
— сворачивание кода
— интегрированая помощь
— поддержка отладки
— и еще много других ;-) о которых авторы постеснялись рассказать

Code::Blocks
http://www.codeblocks.org/
Поддерживаемая система: Linux/Mac OS X/Windows
Поддерживаемые компиляторы: GCC(MinGW)/Digital Mars C/C++/Microsoft Visual C++ 6/Microsoft Visual C++ Toolkit 2003/Microsoft Visual C++ 2005/2008/Borland C++ 5.5/Watcom/Intel C++ compiler

— поддержка дебагеров GNU GDB и MS CDB (правда реализована пока не вся функциональность MS CDB)
— и др.

Eclipse C/C++ Development Tools
http://www.eclipse.org/cdt/
Поддерживаемая система: AIX/FreeBSD/HP-UX/Linux/Mac OS X/OpenSolaris/Solaris/QNX/Windows
Поддерживаемые компиляторы: преимущественно основанные на GNU GCC

Одна из известнейших сред разработки, «краеугольный камень» которой заложила IBM. По сути, Eclipse C/C++ Development Tools (CDT), является плагином одной большой интегрированной среды разработки модульных кроссплатформенных приложений и имя ей — Eclipse. Т.о. Eclipse включает в себя набор плагинов позволяющих создавать приложения на Java, C/C++, PHP и др. Разработкой всей этой махины руководит Eclipse Foundation, бегло ознакомиться с которой вы можете, например, на сайте Википедии. Громкие имена компаний, стоящие за разработкой и развитием платформы Eclipse, позволяют с уверенностью говорить о функциональности и стабильности этой среды. Так CDT имеет в своем арсенале все то, что должна иметь современная IDE для C/C++:
— подсветка синтаксиса
— автозавершение кода
— сворачивание кода
— ссылочная навигация по коду (гипертекстовые ссылки)
— рефакторинг кода
— создание и управление проектами для различных инструментальных средств
— стандартная make сборка
— визуальные средтва отладки
— и многие другие
Добавьте к этому различные плагины расширяющие функциональность Eclipse C/C++ Development Tools и вы получите практически идеальную среду разработки :-). Почему практически идеальную? А потому, что разработана она на Java и, соответственно, требует установленную в системе виртуальную машину Java версии не ниже 1.5. Именно это, зачастую, становится решающим фактором для некоторых разработчиков, поскольку при слабой аппаратной части значительно увеличивает время как компиляции разрабатываемого приложения, так и реагирования самой среды на действия пользователя. Закачать же CDT вы всегда можете со страницы загрузки Eclipse.

NetBeans IDE
http://www.netbeans.org/
Поддерживаемая система: FreeBSD/Linux/Mac OS X/OpenSolaris/Solaris/Windows
Поддерживаемые компиляторы: GNU GCC

Как и рассмотренная уже Eclipse C/C++ Development Tools, среда разработки NetBeans написана на языке Java (соответственно так же требует установленной виртуальной машины Java). В общем приближении эти среды даже можно назвать похожими :-). В NetBeans так же реализована модель компонент (плагинов) позволяющих расширять базовый функционал как новыми возможностями, так и поддержкой новых языков программирования — Java, Ruby, C/C++, Groovy, PHP. Естественно, данная среда изначально ориентирована на разработку Java-приложений, но, тем не менее, можно скачать и отдельную сборку IDE поддерживающей написание приложений только на языке C/C++. Конечно же в NetBeans вы найдете все те возможности и инструменты, что доступны и в Eclipse C/C++ Development Tools поэтому выделять что-то отдельное нет смысла :-). Зачастую, сравнивая эти 2 IDE, основная масса разговоров сводится к теме какая из них быстрее работает, а не к обсуждению возможностей. Так что, если вы заинтересованны в среде разработки подобного типа, можете смело качать обе и тестировать какая вам придется более по душе :-).

Microsoft Visual Studio Express
http://www.microsoft.com/express/
Поддерживаемая система: Windows XP SP3/Vista/Server 2003/Server 2008/7
Поддерживаемые компиляторы: MS Visual C++ 2008/2010

Интенсивное развитие бесплатных средств разработки, особенно продуктов за которыми стоят такие титаны ИТ бизнеса как IBM, Oracle, Intel, AMD, очевидно вынудило пересмотреть политику Microsoft на свои продукты для разработчиков ПО. Так с 2005 года каждый желающий может скачать с сайта компании бесплатную версию популярной IDE — Visual Studio Express. Эта редакция Visual Studio представляет собой набор урезанных средств разработки для языков Visual Basic, C#, интересный нам C++ и Visual Web Developer Express и позиционируется Microsoft как IDE начального уровня для лиц не занимающихся профессионально программированием (учащихся, студентов, любителей etc.). Не переживайте — графический интерфейс и возможность создать оконные приложения вам дадут, а вот пользоваться наработками компании в области оптимизации и рефакторинга кода — практически нет. Так же вы не получите и, так всеми любимой в Visual Studio, возможности быстро устанавливать подключения к удаленным базам данных в дизайнере данных, как не получите и поддержки плагинов и компиляцию 64-битных приложений. Но это все не повод отказываться от Visual Studio Express, напротив тем, кто желает научиться программировать в среде Windows и для среды Windows, это будет полезная стартовая площадка, а подключив и MSDN — прекрасным справочным пособием по языку и API Windows.

Qt Creator
http://qt.nokia.com/products/developer-tools/
Поддерживаемая система: Linux/Mac OS X/Windows
Поддерживаемые компиляторы: GNU GCC

46 мб (а в установленном виде порядка 100 Мб) — не выглядит весьма рациональным решением ;-). Поэтому сам так делаю, и всем рекомендую — рассматривать Qt Creator исключительно как среду разработки для кроссплатформенного фреймворка Qt. В этом отношении вы высоко оцените интеграцию IDE с дизайнером форм (Qt Designer) и справочной системой (Qt Assistant). Для начинающих осваивать Qt (и для ленивых мэтров :-)) разработчик, на сайте продукта, предлагает сразу скачать Qt SDK — набор всех необходимх программ для разработки приложений использующих Qt — библиотеку Qt, Qt Creator, компилятор MinGW (для Windows пользователей). Исходя из целевой направленности Qt Creator, можно выделить следующие его особенности:
— интеграция дизайнера форм Qt и справочной системы Qt
— расширяемость (посредством плагинов)
— поддержка дебагеров GDB (графический фронтенд) и CDB
— подсветка кода с поддержкой нескольких языков и разметок
И много других, напрямую не зависимые от Qt Creator’а, а реализуемые посредством Qt, например, возможность создавать приложения для мобильных телефонов под управлением операционной системы Symbian и Maemo.

На этой радостной, надеюсь, ноте я хотел бы закончить свой обзор :-). Чем пользоваться в своей работе каждый волен выбирать сам, либо ему диктуют корпоративные правила. Хочется верить, что кому-то этот очерк позволит так же определиться в своем выборе ;-). Для меня, лично, это стала связка Code::Blocks + MinGW и, конечно же, Qt SDK.

Мощь Watcom

. С тех пор Watcom С++ становится практическим стандартом при программировании для MS-DOS.

В последние годы все большую популярность приобретает визуальное программирование. Это достаточно легко понять, поскольку для очень широкого класса задач визуальные средства позволяют быстро разрабатывать относительно эффективные продукты, при этом требования к квалификации разработчика не слишком высоки, нет необходимости вникать в системный аспект программирования, он, как правило, замаскирован. Особенно актуальны такие средства разработки на отечественном рынке, поскольку у нас до 90% всех разрабатываемых продуктов — это клиенты баз данных, а как раз их разработка идеально автоматизируется при помощи визуальных средств. В связи с вышесказанным некоторые пророчат скорую смерть классическому программированию путем написания исходного кода почти целиком вручную, однако вряд ли это произойдет. Для обширного класса задач требуется принципиально новый подход и интерфейс (драйверы устройств, игры, системы автоматизации производства и др.), и тут визуальные средства не дают практически никаких преимуществ, с другой стороны, для тех же задач необходима максимально высокая производительность кода, а визуальные средства обязательно ее снижают. Наконец, как это ни странно для многих, огромное количество приложений (особенно игр) все еще разрабатывается под MS-DOS (и на это есть серьезные причины), в таком случае визуальные средства — вообще не помощники.

В таких случаях используются обычные, давно привычные компиляторы. И, особенно если речь идет о необходимости создания высокоэффективного кода, в первую очередь компиляторы с языков C/C++. Еще несколько лет назад негласным стандартом компилятора C в нашей стране (и не только) был Borland C++. Многие пользуются им и по сей день, однако он является морально устаревшим хотя бы уже потому, что не поддерживает генерацию 32-битного кода. С другой стороны, имеется достаточный выбор компиляторов, имеющих такую возможность.

В этой статье речь пойдет о без сомнения лучшем из существующих коммерческих компиляторов C++ — Watcom C/C++. Именно этот продукт был первым генератором 32-битного объектного кода для MS-DOS. Компилятор является кроссплатформным, снабжен многочисленными библиотеками и инструментами отладки и оптимизации, хорошо документирован. Фирма Watcom представляет свой продукт на рынке уже около десяти лет. Где-то в 1992-1993 году Watcom сильно снизил цены на Watcom C/C++ (с 1200$ до 400$) и начал активную рекламную компанию в таких журналах, как «BYTE» и «PC Magazine» (к тому времени уже вышла версия 9.0). Рекламная кампания строилась на утверждениях примерно такого типа: «Watcom C/C++ генерирует код в по крайней мере вдвое более эффективный, чем ваш 16-битный компилятор, а обычно — примерно в пять раз более эффективный». Как ни странно, эти обещания соответствовали истине! Borland и Microsoft пришлось сильно потеснится на рынке компиляторов. Но по-настоящему заговорили о Watcom C/С++ c выходом знаменитого DOOM. Утверждение программистов DOOM о том, что ассемблер практически не использовался при программировании, повергло многих в шок.

С тех пор Watcom С++ становится практическим стандартом при программировании для MS-DOS. Продукты, откомпилированные с помощью Watcom, узнать очень легко — все они начинаются с запуска DOS4GW.EXE — расширителя MS-DOS фирмы Watcom. Это, например, игры Raptor, System Shock, Descent, Magic Carpet, NASCAR Racing, Terminal Velocity и другие. Кроме того, несмотря на то, что самой сильной стороной Watcom безусловно является программирование для MS-DOS, внимание на компилятор обратила фирма IBM, и многие продукты для OS/2 откомпилированы именно им. Многие ругали то, что, работая с Watcom C/С++, приходится часто иметь дело с командной строкой, но, начиная с версии 10.0, в состав продукта входит IDE.

Что же делает Watcom C/C++ столь популярным? В первую очередь, это очень эффективный компилятор, а также набор инструментов, предоставляющий практически неограниченные возможности по оптимизации и отладке кода. Кроме того, привлекательным Watcom C/C++ делает большой набор библиотек (стандартных и поставляемых дополнительно, а также распространяемых по Internet бесплатно), наличие большого набора облегчающих разработку инструментов и возможность легко переносить код с одной операционной системы на другую. Остановимся на всех этих чертах подробнее.

Watcom C/C++ поддерживает разработку для следующих операционных систем: MS-DOS (16 и 32 бит), Windows (все версии, а также поддержка MFC и совместимость по библиотекам с Visual C++), OS/2, QNX, Novell NLMs, AutoCAD. Компилятор осуществляет оптимизацию автоматически, при этом параметры оптимизации могут настраиваться, для дополнительной оптимизации в состав поставки входят специальные самплер (сборщик статистической информации о том, как часто исполняются те или иные отрезки кода) и профайлер. Совместное использование этих двух инструментов позволяет поднимать скорость исполнения кода до просто фантастических пределов. В качестве отладочных средств в состав пакета входят отладчик и дизассемблер. Имеется возможность генерации отладочной информации для внешнего отладчика, включая популярный SoftIce.

В состав поставки, кроме стандартных библиотек C, входят также специальные библиотеки поддержки мультимедиа, библиотеки x86, позволяющие максимально оптимизировать исполняемый код для конкретного процессора (имеется возможность оптимизации конвейерных вычислений на Pentium), кроме того, имеется поддержка Direct X (хотя на самом деле не Watcom поддерживает Direct X, а Direct X поддерживает Watcom, Microsoft не осмелилась проигнорировать разработчиков на Watcom и включила в состав Direct X все необходимые компоненты для совместимости с Watcom C/С++) и, как было сказано выше, совместимость по библиотекам с Visual C++. К тому же, не поддающееся исчислению количество библиотек поставляется дополнительно и распространяется бесплатно по Internet. В частности, из дополнительных библиотек можно отметить Microsoft Games SDK на основе Direct X, а также Intel’s RDX. В состав поставки включен специальный менеджер библиотек, а также компоновщик.

Из сервисных инструментов следует упомянуть в первую очередь IDE. Также имеется набор стандартных инструментов, облегчающий разработку для Windows, главным образом это ревизоры системных ресурсов. Но, вообще-то, нельзя говорить о каком-то конкретном ограниченном наборе инструментов для Watcom С++, поскольку постоянно производятся и поставляются все новые (коммерческие и бесплатные).

Вообще же говоря, Watcom C предлагает такие богатые возможности настройки и модификации, что интегрировать его можно почти с любым инструментом или библиотекой (хотя, возможно, для этого придется написать некоторое количество кода).

Watcom C/C++ использует дополнительно две новые модели памяти — Flat и Large32. Flat для 32-битного программирования — то же, что и Tiny для 16-разрядного, Large32 соответствует модели Large. Обе новых модели позволяют адресовать 4G памяти.

Имеется возможность использования встроенного ассемблера, для повышения совместимости параметры ассемблерным процедурам передаются с использованием #pragma.

Таким образом, Watcom С/С++ — прекрасный профессиональный инструмент, который с чистым сердцем можно порекомендовать всем профессиональным разработчикам на C. Среди кроссплатформных компиляторов, а также компиляторов для MS-DOS единственным достойным соперником Watcom является некоммерческий GNU C++. Но в заключение следует отметить, что если вы — начинающий программист и чувствуете себя не слишком уверенно при работе на С, лучше используйте другой компилятор. Watcom C/C++ позволяет сделать практически все, что угодно, но это не значит, что добиться этого будет легко. Эффективная работа с Watcom требует большого практического навыка и исчерпывающих знаний. Зато уж если вы гуру, Watcom C/C++ поможет вам претворить в жизнь ваши самые дикие мечты!

Илон Маск рекомендует:  Как в visual basic создать цикл
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL