2014-10-16 63 views
0

我有宏:如何获取宏功能的名称?

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

但是这样是不好的,因为我要定义宏的所有可能的宏观功能。 想法?

+5

这听起来像一个XY问题。实际上你试图解决什么? – 2014-10-16 19:47:18

回答

0

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

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

而且使用这种方式

MYMACRO(mypred, 1, 2); 

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