宏扩展到其他宏参数

时间:2016-12-14 13:22:38

标签: c macros arguments

我正在寻找一种方法来制作一个扩展为额外参数的宏:

int constant1=2, constant2=3;
#define add_three_arguments(x,y,z) x+y+z
#define extra_arguments ,constant1,constant2
#define make_value(A) add_three_arguments(A extra_arguments)

int r = make_value(5);

2 个答案:

答案 0 :(得分:1)

我找到的最接近的解决方案是:

int constant1=2, constant2=3;
#define _add_three_arguments(x,y,z) x+y+z
#define add_three_arguments(...) _add_three_arguments(__VA_ARGS__)

#define extra_arguments ,constant1,constant2
#define make_value(A) add_three_arguments(A extra_arguments)

int r = make_value(5);

这当然不能解决我所说的问题。所以目前的答案似乎是“这是不可能的”。但也许新版本的clang / gcc会以某种方式实现这一点。我会把问题打开。

答案 1 :(得分:0)

尝试以下方法:

#define EMPTY
#define EVAL(X) X
#define add_three_arguments(x,y,z) x+y+z
#define extra_arguments ,constant1,constant2
#define make_value(A) EVAL(add_three_arguments EMPTY (A extra_arguments))

make_value(5);

但是,如果重新设计宏,您可能会得到一个更好的解决方案,不需要这样的结构。