无法在 CPP 中连接令牌

Unable to concatenate tokens in CPP

(是的,又是可怕的 C 预处理器连接标记...)

我正在尝试制作一个 CPP 宏,它采用公式的多个部分并将它们输入以制作成品。我尝试过 ## 各种方法,但总是 运行 遇到可怕的 "pasting X and Y does not give a valid preprocessor token" 问题。

我有标记 23TRISSET,需要将宏扩展为:

(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)  

但这当然行不通。

我试过将每个部分都提供给另一个宏来进行连接,但效果是一样的。

&TRISSET+ 不是有效的预处理器标记。您只能加入 ## 个会生成有效预处理器令牌的令牌。只是不要 - 它们无论如何都是单独的标记。

#define gpioPIN_TO_REGSUB(P, R, S)  (sfr_t)(&R ## A ## S + (((P)/16) * 0x100))