无法在CPP中连接令牌

问题描述 投票:1回答:1

((是的,这又是可怕的C预处理程序令牌的串联...)

我正在尝试制作一个CPP宏,该宏需要一个公式的许多部分并将其供料以制成成品。我已经以各种方式尝试了##,但始终遇到可怕的“粘贴X和Y不会提供有效的预处理器令牌”的问题。

我有令牌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)  

但是,那当然行不通。

我已经尝试过将每个部分都提供给另一个宏以进行串联,但是它的作用相同。

c c-preprocessor
1个回答
2
投票

&TRISSET+不是有效的预处理器令牌。您只能与将导致有效的预处理器令牌的##令牌一起加入。只是不要-它们仍然是单独的令牌。

#define gpioPIN_TO_REGSUB(P, R, S)  (sfr_t)(&R ## A ## S + (((P)/16) * 0x100))
© www.soinside.com 2019 - 2024. All rights reserved.