Я использую Code :: Blocks с компилятором GNU GCC.
Мой вопрос: есть ли способ скомпилировать код c / c ++ в 16-битный (.com) исполняемый формат ms-dos?
Я пытался установить параметры сборки и искать параметры компилятора в сети, но ничего не смог найти.
Вы, безусловно, можете скомпилировать C и / или (древний диалект) C ++ в 16-битный MS-DOS .com файл. Компилятор / компоновщик у вас с Code :: Blocks почти наверняка не может хотя сделай это.
В частности, по крайней мере, насколько мне известно, gcc никогда даже не пытался генерировать код для 16-битной среды с сегментированной памятью. Был как минимум один порт gcc для расширителя DOS (DJGPP, но он создает файлы .exe, а не .com и использует проприетарный DOS-расширитель вместе с древний версия gcc).
Если вам действительно нужно сгенерировать файл .com, есть довольно много вариантов, но все компиляторы довольно старые, поэтому, особенно в отношении C ++, язык, который они принимают, весьма ограничен.
Предостережение: как уже отмечалось, все это очень старый. Вообще говоря, C, который они принимают, достаточно совместим с C89, но только для довольно небольших программ (как с точки зрения кода, так и размера данных — по необходимости: файлы .com в основном ограничены общим объемом 64 КБ данных и кода). Различия между C ++, который они принимают, и тем, что даже близко к современному, намного глубже (например, некоторые не поддерживают шаблоны совсем). Все упоминания о соответствии здесь относятся к другим компиляторам того времени; по современным стандартам их соответствие ужасно одинаково.
Тогда их было еще немало, но на тот момент они, вероятно, составляли более 90% рынка.
То, что вы ищете, это exe2bin. Это была утилита, которая шла вместе с DOS для преобразования объектного кода формата .EXE в формат .COM (код и данные в одном сегменте 64K). Это пришло с DOS и некоторыми компиляторами / ассемблерами.