Подтвердить что ты не робот

Макрос С++ с переменным числом аргументов

Возможный дубликат:
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 в макросе foo_k в зависимости от его количества параметров? Возможно ли это?

4b9b3361

Ответ 1

Как насчет:

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

Ответ 2

Это должно работать:

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

Обратите внимание, что это использует расширение GNU, и поэтому будет работать только с gcc и gcc-совместимыми компиляторами. @JoeSlav ответ, используя __VA_ARGS__, более портативен.