【发布时间】:2020-03-27 16:58:12
【问题描述】:
我在一个库中工作,该库是其他库的接口,其中包含几个已定义的宏,例如:
#define GPIOx some stuff
#define __HAL_RCC_GPIOx_CLK_ENABLE() some other stuff
其中 x 是一个字母 (A,B,C,...)。
我无法更改这些宏(或者我不应该更改它们,因为它们被其他组件使用)。
在我正在工作的库中,我正在尝试定义一些其他用户可以修改的宏,例如:
#define DHT_GPIO_Port GPIOx
我想定义一个宏,它使用这样的定义来生成另一个宏名称:
#define __HAL_DHT_CLK_ENABLE(DHT_GPIO_Port) __HAL_RCC_## DHT_GPIO_Port ##_CLK_ENABLE()
这是因为我想为我的库使用宏而不是 __HAL_RCC_GPIOx_CLK_ENABLE(),因为它会根据用户定义的 GPIO 而有所不同。
但是,当我尝试使用我的 __HAL_DHT_CLK_ENABLE(DHT_GPIO_Port) 宏时,它会扩展为 __HAL_RCC_DHT_GPIO_Port_CLK_ENABLE(),而不是 __HAL_RCC_GPIOx_CLK_ENABLE()。
另一方面,我尝试将它放在另一个宏中,但它也扩展了 GPIOx,而我不需要。
也许这是一个初学者的问题,但你能帮助在其他宏连接中仅扩展宏 DHT_GPIO_Port 的第一级吗?
【问题讨论】: