Работа с кодировками (character encoding) входного файла

Работа с различными кодировками (character encoding) входного файла в lcc немного отличается от того, как это реализовано в gcc. В gcc для управления процессом используются три опции:

  • -finput-charset=<param> - по этой опции настраивается ВХодная кодировка (кодировка, в которой написан исходный текст). По умолчанию включен режим -finput-charset=UTF-8

  • -fexec-charset=<param> - по этой опции настраивается ВЫХодная кодировка, которая будет использоваться для ordinary символьных и строковых литералов ('a' или "abc"). Т.е. компилятор будет строить переконвертацию в случаях, если exec charset НЕ совпадает с input charset. По умолчанию включен режим -fexec-charset=UTF-8

  • -fwide-exec-charset=<param> - по этой опции настраивается ВЫХодная кодировка, которая будет использоваться для wide символьных и строковых литералов (L'a' или L"abc"). По умолчанию включен режим -fexec-charset=UTF-32

В lcc используется упрощённая (по отношению к gcc) модель со следующими отличиями:

  • Через опцию -finput-charset=<param> можно задать только три варианта ВХодной кодировки: KOI8-R, UTF-8, ASCII

  • Через опцию -fexec-charset=<param> можно задать только кодировку, совпадающую с input charset. Другими словами, lcc всегда работает в режиме без переконвертации ordinary символьных и строковых литералов из одной кодировки в другую. В качестве неочевидного побочного эффекта будет выдача ошибки при использовании одной только опции, например, -finput-charset=KOI8-R, т.к. потребуется обязательное добавление опции -fexec-charset=KOI8-R. Но так нужно для того, чтобы избежать путанницы. Если запустить gcc с одной только опцией -finput-charset=KOI8-R, то, учитывая значения по умолчанию, такой запуск будет эквивалентен запуску с опциями -finput-charset=KOI8-R -fexec-charset=UTF-8, т.е. запуску с переконвертацией, который в lcc не поддержан. Поэтому для соблюдения формальной корректности запуска в lcc потребуется подавать опции -finput-charset=KOI8-R -fexec-charset=KOI8-R

  • Через опцию -fwide-exec-charset=<param> можно задать только параметр UTF-32

В остальном поведение lcc совпадает с поведением gcc. Описанные выше ограничения в lcc НЕ являются принципиальными. Они чисто технические и в первую очередь обусловлены отсутствием (на текущий момент) реальной неоходимости строить запсуки с переконвертацией