Ответ 1
Как насчет:
#define FOO( ... ) char* x[] = { __VA_ARGS__ };
Возможный дубликат:
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 в зависимости от его количества параметров? Возможно ли это?
Как насчет:
#define FOO( ... ) char* x[] = { __VA_ARGS__ };
Это должно работать:
#define foo(args...) char* array[] = {args}
Обратите внимание, что это использует расширение GNU, и поэтому будет работать только с gcc и gcc-совместимыми компиляторами. @JoeSlav ответ, используя __VA_ARGS__
, более портативен.
Я рекомендую gcc.gnu.org docs по этому вопросу.
Или вы могли бы сразу перейти к этому ответу:
Как сделать переменный макрос (переменное количество аргументов)