Работа с кодировками (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 НЕ являются принципиальными. Они чисто технические и в первую очередь обусловлены отсутствием (на текущий момент) реальной неоходимости строить запсуки с переконвертацией