可能重复:
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?这可能吗?
答案 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关于这个问题。
或者你可以直接跳到这个答案: