((是的,这又是可怕的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)
但是,那当然行不通。
我已经尝试过将每个部分都提供给另一个宏以进行串联,但是它的作用相同。
&TRIS
和SET+
不是有效的预处理器令牌。您只能与将导致有效的预处理器令牌的##
令牌一起加入。只是不要-它们仍然是单独的令牌。
#define gpioPIN_TO_REGSUB(P, R, S) (sfr_t)(&R ## A ## S + (((P)/16) * 0x100))