宏语法混淆

时间:2015-05-06 07:27:40

标签: c macros c-preprocessor

我已经完成了宏的概念,但从未遇到过

#define reg_add_cfghwmod_beacon_led_control(a,b) \
_reg_add_cfghwmod_beacon_led_control(a)

这种语法可以解释我上面的宏意味着什么。

2 个答案:

答案 0 :(得分:1)

这是一个多线MACRO。

  • 关于尾随\,如果您看到#define指令的语法,C11标准,章节§6.10,它说,

    # define identifier replacement-list new-line
    

因此,换行符结束替换列表并有效地终止指令。因此,为了具有#define指令的多行定义,\用于转义换行符并将后续行的语句作为相同MACRO的替换列表的一部分。< / p>

  • 关于MACRO定义中b的丢失,

取决于编码逻辑。也许尝试回退到只有一个参数的某些早期版本的API。纯粹的猜测

TL; DR; 它只是替换文本(可能是函数调用)

reg_add_cfghwmod_beacon_led_control(a,b)

_reg_add_cfghwmod_beacon_led_control(a)

答案 1 :(得分:1)

正如Sourav Ghosh所说,它是一个多线宏(最后是\)。此外,它有点不自然,因为它的作用是忽略第二个参数。替换不考虑b参数。否则,它就像任何其他宏一样。