如何理解定义宏中的运算符“\”?

时间:2013-04-17 10:36:21

标签: c c-preprocessor

我正在使用微控制器STM32f100RB。在其中一个头文件中,有一些我无法理解的东西。代码如下。任何人都可以告诉我符号“\”是什么?它是运营商吗?如何理解?

我是新手。如果我做的不对,请告诉我。 谢谢。

#define IS_GPIO_ALL_PERIPH(PERIPH) (((PERIPH) == GPIOA) || \
                                    ((PERIPH) == GPIOB) || \
                                    ((PERIPH) == GPIOC) || \
                                    ((PERIPH) == GPIOD) || \
                                    ((PERIPH) == GPIOE) || \
                                    ((PERIPH) == GPIOF) || \
                                    ((PERIPH) == GPIOG))

4 个答案:

答案 0 :(得分:4)

反斜杠只是告诉预处理器将下一行视为同一行。这是必需的,因为宏是在“单行”上定义的......所以这样可以将多行合并为一行。

请注意,在某些(所有?)预处理器中,反斜杠必须是该行的最后一个字符...包括空格。

答案 1 :(得分:2)

这意味着宏继续在下一行,因为需要在一行上定义宏(\实际上“转义”新行的符号。)

基本上,你的宏与:

相同
#define IS_GPIO_ALL_PERIPH(PERIPH) (((PERIPH) == GPIOA) || ((PERIPH) == GPIOB) || ((PERIPH) == GPIOC) || ((PERIPH) == GPIOD) || ((PERIPH) == GPIOE) || ((PERIPH) == GPIOF) || ((PERIPH) == GPIOG))

正如您所看到的,阅读和理解比您在问题中发布的更难阅读和理解。

答案 2 :(得分:2)

gcc documentation州:

  

续行是以反斜杠结尾的行,\。将删除反斜杠,并将以下行与当前行连接。没有插入空格,因此您可以在任何地方分割一条线,即使在单词的中间也是如此。 (通常在白色空格中分割线条更具可读性。)

答案 3 :(得分:1)

\是宏是没有什么,但我们只是通知预处理器没有新行下一个语句也在同一行.......

当有一个很大的表达式不能适合一行或者它适合时,它比使用它不是不可读的。它会在预处理器阶段删除。