首页 > 解决方案 > 宏扩展插入一个额外的逗号和括号?

问题描述

尝试在 Code Composer 上为 MSP430FRx 项目执行一些宏。扩张没有按预期进行。

宏定义

#define SMCLK PORT_PIN(1, 0)

#define PORT_PIN(port, pin) port,pin

#define GPIO_SEL0_SET(port, pin) \
    _GPIO_SEL0_SET(port, pin)

#define _GPIO_SEL0_SET(port, pin) \
    BIT_SET(P ## port ## SEL0, BIT ## pin)

#define BIT_SET(reg, bit) reg |= bit

这是 Code Composer 所做的扩展:

GPIO_SEL0_SET(SMCLK) -> GPIO_SEL0_SET(PORT_PIN(1, 0)) -> GPIO_SEL0_SET(1,0) -> _GPIO_SEL0_SET(1,0, )

这里已经有一个非预期的结果。最后一个扩展添加了一个逗号。expexted 扩展为_GPIO_SEL0_SET(1,0)

_GPIO_SEL0_SET(1,0, ) -> BIT_SET(P1SEL0, BIT0) ) -> BIT_SET(P1SEL0,(0x0001)) ) -> P1SEL0 |= (0x0001) )

它最终有一个额外的括号。

最奇怪的步骤发生在这里: 在此处输入图像描述

在此处输入图像描述

这个扩展出了什么问题?

标签: cmacrosc-preprocessor

解决方案


推荐阅读