c - 宏扩展插入一个额外的逗号和括号?
问题描述
尝试在 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) )
它最终有一个额外的括号。
这个扩展出了什么问题?
解决方案
推荐阅读
- delphi - Delphi XE6 FireDac Param 值中文字符串使用属性赋值(变体类型)
- excel - 如何从输入框中复制值并使用它在其他 excel 中搜索相同的值?
- python - numpy 3D 数组根据行顺序重塑/展平为 1D 数组
- javascript - 如何在 javascript 中检查第三方 cookie 是否被阻止
- c# - 从动态服务器抓取 html 列表数据
- node.js - Crud GET:反应 js axios
- jenkins - 在詹金斯完成工作 A 后,如何触发工作 B?
- node.js - nodeJS docker无法连接到redis服务器
- swift - 如何将凭据添加到文件管理 pdf 请求
- reactjs - 在从列表中删除项目时反应js,直到我重新加载页面