我怎样才能得到宏功能的名称?

时间:2014-10-16 19:43:22

标签: c++ c-preprocessor

我有宏:

#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)

但这种方式很糟糕,因为我应该为所有可能的宏函数定义宏。 想法?

1 个答案:

答案 0 :(得分:0)

你可以这样做,但我不建议。 例如,打印函数名称。

#define MYMACRO(func, ...) \
   (printf("%s\n", #func), func(__VA_ARGS__))

并以这种方式使用

MYMACRO(mypred, 1, 2);

int a = MYMACRO(pred, 1, 2);