【发布时间】:2020-04-27 19:50:10
【问题描述】:
(是的,这又是可怕的 C 预处理器连接标记...)
我正在尝试制作一个 CPP 宏,它采用公式的多个部分并将它们输入以制作成品。我以各种方式尝试过##,但总是遇到可怕的“粘贴 X 和 Y 不会给出有效的预处理器令牌”问题。
我有标记 23、TRIS 和 SET,需要将宏扩展为:
(sfr_t)(&TRISASET + ((23 / 16) * 0x100))
也就是说,类似于:
#define gpioPIN_TO_REGSUB(P, R, S) (sfr_t)(& ## R ## A ## S ## + (((P)/16) * 0x100))
& TRIS A SET (23)
但这当然行不通。
我尝试将每个部分都输入到另一个宏中进行连接,但效果相同。
【问题讨论】:
-
你到底想做什么?你想让
gpioPIN_TO_REGSUB(23, TRIS, SET)产生(sfr_t)(&TRISASET + ((23 / 16) * 0x100))?gpioPIN_TO_REGSUB应该如何使用?你怎么称呼gpioPIN_TO_REGSUB?将S ## +替换为S + -
@KamilCuk
gpioPIN_TO_REGSUB将像变量一样使用。
标签: c c-preprocessor