Возможно, вы захотите взглянуть на библиотеку препроцессора boost . Особенно макросы BOOST_PP_REPEAT_z
:
#define DECL(z, n, text) text ## n = n;
BOOST_PP_REPEAT(5, DECL, int x)
Результат:
int x0 = 0; int x1 = 1; int x2 = 2; int x3 = 3; int x4 = 4;
В вашем случае вы можете сделать:
#define FILL_BUFF_VALUE(z, n, text) text,
#define FILL_BUFF(NPLUSONE, VALUE) { BOOST_PP_REPEAT(NPLUSONE, FILL_BUFF_VALUE, VALUE } VALUE )
int anbuffer[] = FILL_BUFF(4 /* +1 */,0xff); // anbuffer will have length 5 afterwards
, который расширится до
int anbuffer[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };