[lex.ccon]

时间:2017-02-09 13:40:06

标签: c++ newline language-lawyer

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

  

C-炭
    源角色的任何成员   设置
     除了   单引号,反斜杠\或换行符号   逸出序列
  通用字符名称

鉴于new-line character in C is the escape-sequence \n,上面的定义中是否存在矛盾?

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

C ++标准确实为translation phase 1中的行尾指标引入了新行字符,源文件被分解为预处理标记(A character-literal 是一个预处理标记)和translation phase 3中的空格字符序列(包括注释),并且每个转义序列(\n是一个转义序列)被转换为执行字符集的相应成员。 translation phase 5

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