2014-11-20 2 views
0

Начнём с простой строки в C++Строка символов интерпретации компилятором

char const* hello = "動画、読書な"; // I hope it is not offensive, I dont know what this means)) 

И сделать точку, что эта строка хранится в кодировке UTF-8 закодированный файл. Когда я передаю файл с этой линии для компиляции (результат двоичного кода), то при компиляции необходимо выполнить следующие шаги:

  1. Считывает файл (он должен знать, что это файл кодировки, в случае UTF- 8, вероятно, будет легко с помощью спецификации, но как насчет других кодировок?)
  2. Проанализируйте содержимое файла, используя его грамматику, постройте синтаксическое дерево, ...
  3. Если все в порядке, оно начинает писать двоичный код, в на этом этапе он сохраняет константы в коде.

Вопрос в том, как он будет хранить константу выше («動画, 読 書 な»)? Он каким-то образом преобразует его? Или он просто считывает байты после «символа до другого» из файла и сохраняет их как есть? Значит ли это, что окончательный двоичный код зависит от исходной кодировки исходного файла?

+1

Поведение хорошо определено только для компиляторов в C++ 11. http://en.wikipedia.org/wiki/C%2B%2B11#New_string_literals – BlamKiwi

ответ

0

Исходный код должен быть переведен в ASCII в реализации определяется способом, сохраняя символы, которые из исходного кодирования с использованием управляющих последовательностей, где это необходимо:

ISO/IEC 14882: 2003 (E)

2.1.1 Этапы перевода

символов физического файла источника отображаются, в реализации определенных таким образом, чтобы основной источник набор символов (ввод символов новой строки для индикаторов конца строки ) при необходимости. Триграфовые последовательности (2.3) заменяются на соответствующими односимвольными внутренними представлениями. Любой источник символ файла не в базовом наборе символов источника (2.2) заменяется универсальным символьным именем, которое обозначает этот символ. (Реализация может использовать любое внутреннее кодирование до тех пор, пока расширенный символ встречается в исходном файле и тот же расширенный символ , выраженный в исходном файле как универсальный символ-символ (т. Е. С использованием обозначения \ uXXXX), обрабатываются то же самое.)

...

15) глифы для членов основного набора источника предназначены для идентификации персонажей из подмножества ISO/IEC 10646, который соответствует набору символов ASCII. Однако, поскольку отображение из исходных файлов символов в исходный набор символов (описано в фазе 1 перевода) указано как , реализация определена для реализации того, как основные исходные символы представлены в исходных файлах.

Смежные вопросы