编译器解释字符串字符
String characters interpretation by compiler
让我们从C++中的一条简单的行开始
char const* hello = "動画、読書な"; // I hope it is not offensive, I dont know what this means ))
并指出此行存储在utf-8编码文件中。当我传递带有此行的文件进行编译(结果是二进制代码)时,编译执行以下步骤:
- 读取文件(它需要知道文件编码是什么,在 utf-8 的情况下,使用 BOM 可能很容易,但其他编码呢?
- 使用语法解析文件内容,构建语法树,...
- 如果一切正常,它开始编写二进制代码,在此阶段,它将常量保存在代码中。
问题是它将如何存储上面的常量("動画、読書な")?它会以某种方式转换它吗?或者它只是从文件中读取"字符直到另一个"之后的字节并按原样存储它们?那么这是否意味着最终的二进制代码取决于原始源文件编码?
源代码必须以定义的方式转换为 ASCII,必要时使用转义序列保留原始编码中的字符:
ISO/IEC 14882:2003(E)
2.1.1 翻译阶段
物理源文件字符以实现定义的方式映射到基本源 字符集(为行尾引入换行符 指标)如有必要。三元组序列 (2.3) 替换为 相应的单字符内部表示形式。任何来源 替换不在基本源字符集 (2.2) 中的文件字符 通过指定该字符的通用字符名称。(一个 实现可以使用任何内部编码,只要实际 在源文件中遇到的扩展字符,并且相同 在源文件中表示为 处理通用字符名称(即使用 \uXXXX 表示法) 等效地。
。
15) 基本成员的字形 源字符集用于标识 ISO/IEC 10646 的子集,对应于 ASCII 字符集。 但是,因为从源文件字符到源文件的映射 字符集(在转换阶段 1 中描述)指定为 实现定义,需要实现来记录如何 基本源字符在源文件中表示。
相关文章:
- 从 argv[1] 转换为字符 * 字符串后有什么问题?
- 将 NULL 与 C 的字符* 字符串一起使用
- 无法在声明时使用初始值设定项列表初始化常量字符*/字符串数组的向量
- 无法将常量字符字符串传递给模板类
- 如何组合一个宽字符字符串,中间插入一些空字符
- 如何将二维数组类型字符(字符串)作为函数参数传递?
- 从给定索引返回子字符字符串的函数
- 字符 [](c 字符串)的初始化标准
- 如何将字符字符串用作数学运算符
- 将 Unicode 字符/字符串写入文件
- C++,字符* 字符串修改
- 如何有效地用不同的整数元素替换字符字符串的元素
- C++:如果我们在字符串中添加一些整数,为什么它会从开头删除该数量的字符?(字符串 + 整数)
- strcpy正在复制sth字符i字符串.如何解决此错误
- 在C++中将双精度转换为字符*/字符串
- C 中的宽字符字符串
- 如何提取C 中的字符/字符串之间的字符串
- 无法将字符/字符串转换为int
- 带有指针的反转字符字符串
- 反转字符串中的 n 个字符(字符串中没有空格),而不使用 c++ 中的内置函数