2011-03-12 95 views
11

可能重复可变数目:
C/C++: How to make a variadic macro (variable number of arguments)C++宏与参数

我需要宏,将包含它的参数的阵列扩展。例如:

#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宏扩大富?这可能吗?

+0

我不知道,也__VA_ARGS__扩大逗号:)。愚蠢的我:) – Felics 2011-03-12 15:16:24

+0

你看看:http://www.boost.org/doc/libs/1_46_0/libs/preprocessor/doc/index.html – julkiewicz 2011-03-12 14:58:58

+1

我不想提升。要在一个小项目中进行很重要! – Felics 2011-03-12 15:01:45

回答

15

如何:

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

这应该工作:

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

注意,这里使用GNU扩展,因此将只用gcc和gcc兼容的编译工作。 @ JoeSlav的回答使用__VA_ARGS__更便携。

+0

#define foo(...)char * array [] = {__VA_ARGS__} – Felics 2011-03-12 15:15:13

+0

我认为这应该被标记为正确的答案。 – neevek 2012-06-03 02:12:19