Невозможно объединить токены в CPP - PullRequest
1 голос
/ 27 апреля 2020

(Да, это страшная 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)  

Но, конечно, это не работает.

Я пытался взять каждую порцию и передать их другому макросу для конкатенации, но он делает то же самое.

1 Ответ

2 голосов
/ 27 апреля 2020

&TRIS и SET+ не являются допустимыми токенами препроцессора. Вы можете присоединиться только с ## токенами, которые приведут к действительным токенам препроцессора. Только не надо - это все равно отдельные токены.

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