[lex.ccon] 中 c-char 的定义可能存在矛盾

Possible contradiction in the definition of c-char in [lex.ccon]

本文关键字:定义 存在 矛盾 c-char lex ccon      更新时间:2023-10-16

[lex.ccon] 包含以下 c-char 定义:

C-字符
    源字符的任何成员 设置
        除了 单引号 、反斜杠或换行符
    转义序列
    通用字符名称

鉴于C中的换行符是转义序列n,上面的定义是不是有矛盾的?

PS:请注意,C++标准并没有真正定义什么是换行符。

不,当定义说"换行符"时,它表示实际的换行符,而不是特殊的双字符序列(反斜杠和n(,编译器可以在特殊情况下(在常量字符串或字符文字中(将其解释为换行符。

C++ 标准确实说在翻译阶段 1 中为行尾指示符引入换行符,在翻译阶段 3 中将源文件分解为预处理标记(字符文字是预处理标记(和空白字符序列(包括注释(,每个转义序列(n是转义序列(在翻译阶段 5 中转换为执行字符集的相应成员。

因此明确定义,在形成字符文字时,字符序列n不会变成换行符,行尾指示符(以及翻译阶段 1 的所有细节都是实现定义的,但普遍认为行尾指示符在 Unix 和类 Unix 系统上是 LF,在 Windows 上是 CR+LF(已经变成了换行符。