2011-03-12 93 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