Spec-Zone.ru › GCC 6 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 Восьмеричные и шестнадцатеричные управляющие последовательности не преобразуются; '\x12' имеет значение 0x12 независимо от выбранного в настоящее время исполняемого набора символов. Все остальные управляющие последовательности заменяются символом в исходном наборе символов, который они представляют, а затем преобразуются в выполняемый набор символов, точно так же, как и необработанные символы.

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

Примечания

(1)

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

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

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

Spec-Zone.ru

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