我正在寻找一种方法来制作一个扩展为额外参数的宏:
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);
答案 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);
但是,如果重新设计宏,您可能会得到一个更好的解决方案,不需要这样的结构。