通常,通过标准,直接跟在换行符之后的任何\都将转换为没有换行符和反斜杠的代码。例如:
int yams\
yams;
变成
int yamsyams;
和
int cheese // blerg \
more blerg
变成
int cheese // blerg more blerg
对于很长的单行代码,这种行为很不错。
然而,似乎
#\
This code not part of the macro
虽然
#a\
This code is part of the macro.
甚至
# \
This code is not part of the macro
虽然
# a\
This code is part of the macro
为什么这是“\ newline”被删除规则的一个例外?
答案 0 :(得分:2)
如[lex.phases]中所述,替换反斜杠换行符是由预处理器完成的,并且应该在第2阶段很早就发生,这是在将源拆分为预处理器令牌(阶段3)之前和处理预处理器之前指令,例如#define
或#include
(第4阶段)。
因此,在所有示例中,您都应该看到反斜杠换行符。