在预处理C的早期阶段,新行(不同于引号外的其他类型的空白)被保留;到实际解析开始时,它们就消失了。他们什么时候被移走?
5.1.1.2翻译阶段为“7。分隔标记的空白字符不再有意义,但在“6”之后。相邻的字符串文本标记被连接起来“这似乎不对,因为单独行上的字符串文本仍然被连接起来。我错过了什么?
6.10.3.2#运算符表示“参数的预处理标记之间每次出现的空格都会成为字符串文字中的一个空格字符。”这是不是一个较早删除的换行符,与从整个文件中删除换行符分开?
最佳答案
你说得对,那篇文章有点模棱两可。很明显,新行在第4阶段之前是重要的,否则预处理指令无法正确执行。“相邻字符串文字标记”的含义从未被解释过,特别是因为空白只在第7阶段才失去意义。
我的理解是,“相邻令牌”是仅由空格(如果有的话)分隔的令牌,空格本身不被视为构成令牌。通过读取,很明显,第6阶段将删除字符串文本标记之间的换行符。
关于c - 何时完全在预处理中删除换行符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17230619/