Spec-Zone.ru › GCC 11 CPP

Next: Первичная обработка, Up: Обзор [Оглавление][Индекс]

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, то эти конструкции запрещены в идентификаторах.

Примечания

(1)

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

Next: Первичная обработка, Up: Обзор [Оглавление][Индекс]

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

Spec-Zone.ru

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