Токены и кодировки

Текст программы C++ состоит из маркеров и пробелов. Токен — это наименьший элемент на C++, который имеет значение для компилятора. Средство синтаксического анализа C++ распознает такие типы маркеров:

Маркеры обычно разделены пробелами, которые могут быть одним или несколькими:

  • Пустые значения
  • Символы горизонтальной и вертикальной табуляции
  • Символы перевода строки
  • Веб-каналы форм
  • Комментарии

Основная кодировка исходного кода

Стандарт C++ указывает основную кодировку исходного кода , которая может использоваться в исходных файлах. Для представления символов вне этого набора можно указывать дополнительные символы, используя универсальные имена символов. Реализация MSVC позволяет использовать дополнительные символы. Основная кодировка исходного кода состоит из 96 символов, которые могут использоваться в исходных файлах. Этот набор включает символ пробела, горизонтальной и вертикальной табуляции, управляющие символы перевода страницы и новой строки, а также следующий набор графических символов:

a b c d e f g h i j k l m n o p q r s t u v w x y z

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

0 1 2 3 4 5 6 7 8 9

_ { } [ ] # ( ) < > % : ; . ? * + - / ^ & | ~ ! = , \ " '

Блок, относящийся только к системам Майкрософт

MSVC включает $ символ в качестве члена базового исходного набора символов. MSVC также позволяет использовать дополнительный набор символов в исходных файлах на основе кодировки файлов. По умолчанию Visual Studio сохраняет исходные файлы, используя кодовую страницу по умолчанию. Если исходные файлы сохраняются с помощью кодовой страницы для конкретного языкового стандарта или кодовой страницы Юникода, MSVC позволяет использовать любой из символов этой кодовой страницы в исходном коде, за исключением кодов элементов управления, которые явно не разрешены в базовом исходном наборе символов. Например, японские символы можно поместить в комментарии, идентификаторы или строковые литералы, если файл сохраняется с использованием кодовой страницы японского языка. MSVC не разрешает последовательности символов, которые нельзя преобразовать в допустимые многобайтовые символы или точки кода Юникода. В зависимости от параметров компилятора не все допустимые символы могут отображаться в идентификаторах. Дополнительные сведения: Идентификаторы.

Завершение блока, относящегося только к системам Майкрософт

универсальные имена символов

Поскольку программы на C++ могут использовать гораздо больше символов, чем указано в основной кодировке исходного кода, можно указать эти символы в переносимом виде, используя универсальные имена символов. Универсальное имя состоит из последовательности символов, представляющих кодовую точку Юникода. Оно может иметь две формы. Используйте \UNNNNNNNN для представления кодовой точки Юникода в форме U+NNNNNNNN, где NNNNNNNN — шестнадцатеричный номер кодовой точки из восьми цифр. Используйте код \uNNNN из четырех цифр для представления кодовой точки Юникода в форме U+0000NNNN.

Универсальные имена символов можно использовать в идентификаторах и в строковых и символьных литералах. Универсальное имя нельзя использовать для представления суррогатной кодовой точки в диапазоне от 0xD800 до 0xDFFF. Вместо этого используйте нужную кодовую точку: компилятор автоматически создает все необходимые суррогаты. К универсальным именам символов, которые могут использоваться в идентификаторах, применяются дополнительные ограничения. Дополнительные сведения см. в разделах Identifiers и String and Character Literals.

Блок, относящийся только к системам Майкрософт

Компилятор Microsoft C++ обрабатывает символ в форме универсального имени символа и взаимозаменяемой форме литерала. Например, можно объявить идентификатор, используя форму универсального имени символа, и использовать его в форме литерала:

auto \u30AD = 42; // \u30AD is 'キ'
if (キ == 42) return true; // \u30AD and キ are the same to the compiler

Формат расширенных символов в буфере обмена Windows зависит от параметров языкового стандарта приложения. Вырезание и вставка этих символов с переносом в код из другого приложения может вызвать использование непредвиденных кодировок. Это может привести к ошибкам синтаксического анализа без видимой причины в коде. Перед вставкой расширенных символов рекомендуется выбирать в качестве кодировки исходного файла кодовую страницу Юникода. Кроме того, для создания расширенных символов рекомендуется использовать IME или приложение "Таблица символов".

Завершение блока, относящегося только к системам Майкрософт

Наборы символов выполнения

Наборы символов выполнения представляют символы и строки, которые могут отображаться в скомпилированной программе. Эти наборы символов состоят из всех символов, разрешенных в исходном файле, а также символов управления, представляющих оповещение, пространство спины, возврат каретки и пустой символ. Кодировка выполнения имеет представление, определяемое языковым стандартом.