无法在 CPP 中连接令牌
Unable to concatenate tokens in CPP
(是的,又是可怕的 C 预处理器连接标记...)
我正在尝试制作一个 CPP 宏,它采用公式的多个部分并将它们输入以制作成品。我尝试过 ##
各种方法,但总是 运行 遇到可怕的 "pasting X and Y does not give a valid preprocessor token" 问题。
我有标记 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)
但这当然行不通。
我试过将每个部分都提供给另一个宏来进行连接,但效果是一样的。
&TRIS
和 SET+
不是有效的预处理器标记。您只能加入 ##
个会生成有效预处理器令牌的令牌。只是不要 - 它们无论如何都是单独的标记。
#define gpioPIN_TO_REGSUB(P, R, S) (sfr_t)(&R ## A ## S + (((P)/16) * 0x100))
(是的,又是可怕的 C 预处理器连接标记...)
我正在尝试制作一个 CPP 宏,它采用公式的多个部分并将它们输入以制作成品。我尝试过 ##
各种方法,但总是 运行 遇到可怕的 "pasting X and Y does not give a valid preprocessor token" 问题。
我有标记 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)
但这当然行不通。
我试过将每个部分都提供给另一个宏来进行连接,但效果是一样的。
&TRIS
和 SET+
不是有效的预处理器标记。您只能加入 ##
个会生成有效预处理器令牌的令牌。只是不要 - 它们无论如何都是单独的标记。
#define gpioPIN_TO_REGSUB(P, R, S) (sfr_t)(&R ## A ## S + (((P)/16) * 0x100))