我看到了这段代码:
#define REPEAT(statement) \
{ \
while((count & ~0x7) && ((x+8) < width)) \
UNROLL8( statement; count--; x++; ); \
\
while((count > 0) && (x < width)) \
{ \
statement; \
count--; \
x++; \
} \
}
这里的\
是什么?
答案 0 :(得分:4)
宏的定义仅包括逻辑单行。宏定义每行末尾的\
用于允许将宏定义拆分为多个物理源行(可能出于可读性原因)。
这是有效的,因为在翻译的第二阶段删除后跟新行的\
,但预处理器在第四阶段中稍后运行。 [lex.phases]/2
:
删除后跟新行字符的反斜杠字符(\)的每个实例,拼接物理源代码行以形成逻辑源代码行。
答案 1 :(得分:3)
在宏定义中,\
表示 continuation 。
宏的定义应该在一行上,即没有任何中断。因为在你的定义中,宏定义是如此之大,以至于它不能在不破坏可读性的情况下方便地容纳在同一行上。因此,\
用于向预处理器指示继续到下一行的定义,以便保持程序的可读性。
请注意,\
必须后跟换行符。确保\
之后没有空格。
答案 2 :(得分:1)
这些是将整个#define
事物解释为一行所必需的行继续,这是预处理器语法所要求的。通过这种方式,它更具可读性。
答案 3 :(得分:1)
这意味着在实际的换行符后,宏文本会继续。
#define
从一条有条不紊的路线读取其内容。只有&#39; \
字符会逃脱&#39; (即跳过)以下换行符。