C++阶段1源文件字符翻译集:C++11之前与C++23之前

jutyujz0  于 2024-01-09  发布在  其他
关注(0)|答案(1)|浏览(113)

cppreference的page on phases of translation,对于翻译的第一阶段(在C23之前),在其步骤2中有一个注解:
接受的源文件字符集是实现定义的(C
11起)
这在a working draft of the spec (for instance, for C++20)中也有体现。
鉴于此,在C23之前,它似乎总是实现定义的源代码文件的字节如何Map到基本源字符集的字符,上面的规则在C11实现时增加了什么?即拥有它与不拥有它的净变化是什么?这可能只是一个阅读理解问题,但对我来说似乎不清楚,因为它接着说:
任何无法Map到基本源字符集中的字符的源文件字符都将被其通用字符名(用\u或\U转义)或某种实现定义的形式(以等效方式处理)替换。
例如,C11的增加是否意味着由实现来决定将哪些字符Map到基本源字符集或Map到通用字符名(即允许跳过源文件中的字符,根本不翻译它们)?否则,通过上面关于Map到基本源字符或通用字符名称或等效物的一点,我不清楚C11规则在cppreference页面上第1阶段第1步之后实现了什么,即:
源代码文件的各个字节被Map(以实现定义的方式)到基本源字符集的字符

kyxcudwk

kyxcudwk1#

在C11之前,唯一直接可用的字符是基本源字符集中的字符,其他字符需要转义。
从C
11开始,实现定义了除了基本源字符集之外,哪些字符可以不转义,哪些可以转义。
从C++23开始,所有Unicode字符都可以使用,而无需转义。

相关问题