2011-03-12 13 views
11

posible duplicado:
C/C++: How to make a variadic macro (variable number of arguments)C++ con número variable de argumentos

necesito macro que se expandirá en una matriz que contiene es argumentos. Por ejemplo:

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

y así sucesivamente. Mi problema es que necesito usar foo con un número variable de argumentos, así que quiero poder usar foo ("foo0") pero también usar foo ("foo0", "foo1", "foo2" ... " fooN "). Sé que es posible tener:

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

Y el uso de ____VA_ARGS____, pero no sé qué puedo ampliar foo en macro foo_k dependiendo de su recuento de parámetros? es posible?

+0

no sabía que __VA_ARGS__ ampliar también las comas :). Estúpido de mí :) – Felics

+0

¿Has mirado en: http://www.boost.org/doc/libs/1_46_0/libs/preprocessor/doc/index.html – julkiewicz

+1

No quiero impulso. ¡Es demasiado pesado para llevar en un pequeño proyecto! – Felics

Respuesta

15

¿Qué tal:

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

Esto debería funcionar:

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

Tenga en cuenta que este utiliza una extensión de GNU y así sólo funcionará con gcc gcc y compatible con los compiladores. La respuesta de @SlaSlav usando __VA_ARGS__ es más portátil.

+0

#define foo (...) char * array [] = {__VA_ARGS__} – Felics

+0

Creo que esto debería marcarse como la respuesta correcta. – neevek

Cuestiones relacionadas