Spec-Zone.ru › GCC 5 CPP

1.1 Наборы символов

Обработка наборов символов исходного кода в C и родственных языках довольно сложна. Стандарт C обсуждает два набора символов, но на самом деле их по крайней мере четыре.

Вводимые в CPP файлы могут быть в любом наборе символов. Самое первое действие CPP, даже прежде чем оно начнет искать границы строк, заключается в преобразовании файла в набор символов, используемый для внутренней обработки. Этот набор — то, что стандарт C называет исходным набором символов. Он должен быть изоморфен ISO 10646, также известному как Unicode. CPP использует кодировку UTF-8 Unicode.

Наборы символов входных файлов указываются с помощью опции -finput-charset=.

Вся предварительная обработка (предмет остальной части данного руководства) выполняется в исходном наборе символов. Если вы запросите текстовый вывод предварительного процессора с опцией -E, он будет в UTF-8.

После завершения предварительной обработки строковые и символьные константы преобразуются ещё раз, в исполнительный набор символов. Этот набор символов находится под управлением пользователя; по умолчанию — UTF-8, соответствующий исходному набору символов. Широкие строковые и символьные константы имеют свой набор символов, который не указан конкретно в стандарте. Опять же, он находится под управлением пользователя. По умолчанию — UTF-16 или UTF-32, какой из них подходит для типа wchar_t целевой машины в порядке байтов целевой машины.1 Восьмеричные и шестнадцатеричные escape-последовательности не претерпевают преобразования; '\x12' имеет значение 0x12 независимо от текущего выбранного исполнительного набора символов. Все остальные escape-последовательности заменяются символом в исходном наборе символов, который они представляют, а затем преобразуются в исполнительный набор символов, подобно неэскейп-символам.

В идентификаторах символы за пределами диапазона ASCII могут быть указаны только с escape-последовательностями ‘\u’ и ‘\U’, а не напрямую. Если строгое соответствие стандарту ISO C90 задано с помощью такой опции, как -std=c90, или используется -fno-extended-identifiers, то эти escape-последовательности не допускаются в идентификаторах.

Примечания

(1)

UTF-16 не удовлетворяет требованиям стандарта C для набора символов с широким символом, но выбор 16-битного wchar_t закреплён в некоторых ABI систем, поэтому мы не можем исправить это.

Далее: Первичная обработка, Наверх: Обзор [Оглавление][Указатель]

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-5.5.0/cpp/Character-sets.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API