C макрос ## не работает для определения функции - PullRequest
1 голос
/ 01 февраля 2020
#define FUNCXY(x,y) void FUNC_##x_##y(int){}
#define FUNCXYGOOD(x,y) void FUNCGOOD_##x##_##y(int){}
FUNCXY(2, 1) //get expanded to void FUNC_x_1(int){}
FUNCXYGOOD(2, 1) //get expanded to void FUNCGOOD_2_1(int){}

Почему FUNCXY не работает, а FUNCXYGOOD работает, что за этим стоит C правило?

1 Ответ

1 голос
/ 01 февраля 2020

Ответ очень прост. макропараметра x_ нет. Подчеркивания являются частью макротокена. Подчеркивание такое же, как и у любого другого действующего символа токена

В противном случае было бы неправильно иметь такой макрос:

#define FOO(x, xa, xb)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...