1

在预处理 C 的早期阶段,会保留换行符(与引号外的其他类型的空白不同);到实际解析开始时,它们已经消失了。它们究竟是什么时候被移除的?

5.1.1.2 翻译阶段说“7. 分隔标记的空白字符不再重要”,但那是在“6. 连接相邻的字符串文字标记”之后,这似乎不正确,因为单独行上的字符串文字仍然连接。我错过了什么?

6.10.3.2 # 运算符表示“参数的预处理标记之间每次出现的空白都成为字符串文字中的单个空格字符。” 这是较早删除换行符,与从整个文件中删除它们分开吗?

4

1 回答 1

2

您是对的,该文本中存在一些歧义。很明显,换行符在第 4 阶段之前很重要,否则无法正确执行预处理指令。什么会使“相邻的字符串文字标记”从未被解释过,特别是因为空白仅在第 7 阶段才失去其意义。

我的理解是“相邻标记”是仅由空格(如果有)分隔的标记,空格本身不被视为形成标记。通过阅读,很明显字符串文字标记之间的换行符在第 6 阶段被删除。

于 2013-06-21T13:17:32.760 回答