Макрос C для вставки токенов - PullRequest
0 голосов
/ 14 мая 2018

У меня есть макрос, определенный ниже

#define X_T_a(b)            b->a

b = указатель на структуру, поле a = в этой структуре

Я хочу определить другой макрос T (a, b)который разрешается в X_T_a (b)

Должен ли я использовать

#define T(a, b)             X_T_##a(b)

или

#define T(a,b)   X_T(a,b)
#define X_T(a,b)   X_T_##a(b)

оба работают для ввода, который я использую ... Но я не очень знакомс использованием макросов.Я хочу понять, может ли какой-то вклад сломать это ..

1 Ответ

0 голосов
/ 14 мая 2018

Версия одного макроса не работает с символами макроса.

Например, скажем, у вас есть:

#define MACRO_OBJECT   realObject
#define MACRO_MEMBER   realMember
T(MACRO_OBJECT, MACRO_MEMBER)

Вы хотите, чтобы это расширилось до X_T_realObject(realMember).

Если вы используете свою первую версию, вы получите X_T_MACRO_OBJECT(realMember), потому что оператор конкатенации ## будет работать до того, как MACRO_OBJECT будет расширен до realObject.

...