У меня есть макрос:
#define MYMACRO(pred, ...) \
pred /* here 'pred' is 'mypred(1, 2)', but I need to get only the name without args */
Что используется следующим образом:
MYMACRO(mypred(1, 2))
Мне нужно получить только имя макрофункции без аргументов.
Я могу сделать это вот так:
#define mypred(...) \
mypred
#define MYMACRO_EXPAND(pred) \
pred /* here 'pred' is 'mypred' without args */
#define MYMACRO(pred, ...) \
MYMACRO_EXPAND(pred)
Но этот способ плохой, потому что я должен определить макросы для всех возможных макрофункций. Идеи?
Вы можете сделать это так, но я не рекомендую. Например, напечатайте имя функции.
#define MYMACRO(func, ...) \
(printf("%s\n", #func), func(__VA_ARGS__))
И использовать его таким образом
MYMACRO(mypred, 1, 2);
или
int a = MYMACRO(pred, 1, 2);