Spec-Zone.ru › GCC 10 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-10.5.0/cpp/Character-sets.html

Spec-Zone.ru

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