具有可变数量参数的C ++宏

时间:2011-03-12 14:50:13

标签: c++ macros

  

可能重复:
  C/C++: How to make a variadic macro (variable number of arguments)

我需要在包含它的参数的数组中扩展的宏。例如:

#define foo(X0) char* array[1] = {X0}
#define foo(X0, X1) char* array[2] = {X0, X1}

等等。我的问题是我需要使用带有可变数量参数的foo,所以我希望能够使用foo(“foo0”)而且还要使用foo(“foo0”,“foo1”,“foo2”......“欢“)。我知道有可能:

#define foo(...)
#define foo_1(X0) ..
#define foo_2(X0, X1) ..
#define foo_3(X0, X1, X2) ..
#define foo_N(X0, X1, ... XN) ..

并使用____VA_ARGS____,但我不知道如何根据它的参数计数在foo_k宏中扩展foo?这可能吗?

3 个答案:

答案 0 :(得分:17)

怎么样:

#define FOO( ... ) char* x[] = { __VA_ARGS__ };

答案 1 :(得分:3)

这应该有效:

#define foo(args...) char* array[] = {args}

请注意,这使用GNU扩展,因此仅适用于gcc和gcc兼容的编译器。 @ JoeSlav使用__VA_ARGS__的答案更具便携性。

答案 2 :(得分:0)

我建议gcc.gnu.org docs关于这个问题。

或者你可以直接跳到这个答案:

How to make a variadic macro (variable number of arguments)