在宏声明中,如:
#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 ;\
}}\
Run Code Online (Sandbox Code Playgroud)
这些反斜杠(\)的含义是什么?
Bat*_*eba 13
这是一个线条延续的角色.
之后应该没有别的东西(除了行尾字符),包括空格.
它对宏特别有用,因为它增加了清晰度.
(非常,非常偶尔 - 特别是在旧代码中 - 你会看到三角形序列 ??/代替\.这些天虽然它更像是一个采访者的技巧问题.)
Arn*_*rtz 12
斜杠用于使以下行结束为预处理器的非换行符.A #define必须是预处理器的一行.为了增强可读性,您可以在行尾之前使用反斜杠.预处理器将首先擦除前面带有反斜杠的任何换行符,并且只有在解析之后才会擦除#define.因此,当您看到多行时,PP只能看到一行.
这就是所谓的续行.这意味着您的生产线将继续排在后面.如果以这种方式编写,有时读取内容会更容易.
顺便说一句 - 继续线在预处理器通过时"粘合".
在此处阅读第3步:gcc docs
摘抄:
/\
*
*/ # /*
*/ defi\
ne FO\
O 10\
20
Run Code Online (Sandbox Code Playgroud)
相当于:
#define FOO 1020
Run Code Online (Sandbox Code Playgroud)
值得注意的是,不必在预处理器宏中使用连续的行.这是完全合法的顶级写:
f\
lo\
at f = 5.0;
Run Code Online (Sandbox Code Playgroud)
这与:
float f = 5.0;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3985 次 |
| 最近记录: |