0

我正在使用微控制器 STM32f100RB。在一个头文件中,有一些我无法理解的东西。代码如下。谁能告诉我符号“\”是什么?是算子吗?怎么理解?

我是这里的新手。如果我做的任何事情都不合适,请告诉我。谢谢你。

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

4 回答 4

4

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

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

于 2013-04-17T10:37:31.237 回答
2

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

基本上,您的宏与以下内容相同:

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

如您所见,阅读和理解比您的问题中发布的更难。

于 2013-04-17T10:37:33.407 回答
2

gcc 文档指出:

续行是以反斜杠 \ 结尾的行。反斜杠被删除,以下行与当前行连接。没有插入空格,因此您可以在任何地方分割一行,甚至在一个单词的中间。(通常只在空白处分割行更具可读性。)

于 2013-04-17T10:40:16.350 回答
1

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

当有一个大表达式不能放在一行中,或者如果它适合而不是不可读,则使用此 \。它在预处理器阶段删除。

于 2013-04-17T11:41:02.427 回答