在像以下的宏声明中:
#define WAIT_SPI2_TRANSMISSON_END() {while ((SPI2_SR & SPI_SR_TXCTR_MASK) != 0) {\
if( SPI2_SR & SPI_SR_RFDF_MASK ) {\
(void)SPI2_POPR;\
SPI2_SR |= SPI_SR_RFDF_MASK ;\
}}\
这些反斜杠(\
)的含义是什么?
答案 0 :(得分:13)
这是一个续行字符。
除了行尾字符之外,应该没有别的东西(包括空格)。
它对宏来说特别有用,因为它增加了清晰度。
(非常,非常偶尔 - 特别是在旧代码中 - 你会看到三字符序列 ??/
代替\
。这些天虽然它更像是一个采访者'技巧问题。)
答案 1 :(得分:8)
斜杠用于使以下行结束为预处理器的非换行符。 #define
必须恰好是预处理器的一行。为了增强可读性,您可以在行尾之前使用反斜杠。预处理器将首先删除任何前面带有反斜杠的换行符,然后才会解析#define
。因此,当您看到多行时,PP只能看到一行。
答案 2 :(得分:7)
这就是所谓的续行。这意味着您的生产线将继续排在后面。如果以这种方式书写,有时读书的内容会更容易。
BTW - 继续线在预处理器传递中被“胶合”。请阅读第3步:gcc docs
摘录:
/\
*
*/ # /*
*/ defi\
ne FO\
O 10\
20
相当于:
#define FOO 1020
值得注意的是,不必在预处理器宏中使用连续的行。这是完全合法的顶级写:
f\
lo\
at f = 5.0;
与:
相同float f = 5.0;
答案 3 :(得分:3)
这意味着define语句会超过一行。