在预处理C的早期阶段,保留换行符(与引号外的其他类型的空格不同);当实际解析开始时,它们就消失了。什么时候删除它们?
5.1.1.2翻译阶段表示“7.分隔令牌的空白字符不再重要”,但是在“6.相邻的字符串文字标记连接”之后,这似乎不正确,因为单独行上的字符串文字仍然连接在一起。我错过了什么?
6.10.3.2#运算符表示“参数的预处理标记之间每次出现的空格都会成为字符串文字中的单个空格字符。”这是早期删除换行符,与从整个文件中删除它们分开吗?
答案 0 :(得分:2)
你说得对,文本中有点含糊不清。很明显,换行在第4阶段很重要,否则预处理指令无法正确执行。什么会使“相邻的字符串文字标记”永远不会被解释,特别是因为空格只在第7阶段失去了它们的意义。
我的理解是“相邻的令牌”是仅由空格(如果有的话)隔开的令牌,白色空间本身不被视为形成令牌。通过该读数,很明显第6阶段删除了字符串文字标记之间的换行符。