I use the following code to generate a list (used later in a x macro)
#define LIST_OF_VARIABLES \ X(value1) \ X(value2) \ X(value3) \ X(value4) \ X(value5) \ X(value6) \ X(value7)
Is there a way to generate a list with a given size N. Such that the resulting list contains elements from value0 to valueN ?
Im using the following X macro
#define X(name) unsigned long long int name; LIST_OF_VARIABLES #undef X #define X(name) name =idx; LIST_OF_VARIABLES #undef X
and generates this output
value1 =idx; value2 =idx; value3 =idx; value4 =idx; value5 =idx; value6 =idx; value7 =idx;
Solution thanks to M Oehm
//#################Q VAR GENERATION################# #define VAR(P, NNN, NN, N) P##NNN##NN##N #define NUM0(P, X, NNN, NN) X(VAR(P, NNN, NN, 0)) #define NUM1(P, X, NNN, NN) NUM0(P, X, NNN, NN) X(VAR(P, NNN, NN, 1)) #define NUM2(P, X, NNN, NN) NUM1(P, X, NNN, NN) X(VAR(P, NNN, NN, 2)) #define NUM3(P, X, NNN, NN) NUM2(P, X, NNN, NN) X(VAR(P, NNN, NN, 3)) #define NUM4(P, X, NNN, NN) NUM3(P, X, NNN, NN) X(VAR(P, NNN, NN, 4)) #define NUM5(P, X, NNN, NN) NUM4(P, X, NNN, NN) X(VAR(P, NNN, NN, 5)) #define NUM6(P, X, NNN, NN) NUM5(P, X, NNN, NN) X(VAR(P, NNN, NN, 6)) #define NUM7(P, X, NNN, NN) NUM6(P, X, NNN, NN) X(VAR(P, NNN, NN, 7)) #define NUM8(P, X, NNN, NN) NUM7(P, X, NNN, NN) X(VAR(P, NNN, NN, 8)) #define NUM9(P, X, NNN, NN) NUM8(P, X, NNN, NN) X(VAR(P, NNN, NN, 9)) #define NUM(P, X, NNN, NN, N) NUM##N(P, X, NNN, NN) #define NNUM0(P, X, NNN, N) NUM(P, X, NNN, 0, N) #define NNUM1(P, X, NNN, N) NNUM0(P, X, NNN, 9) NUM(P, X, NNN, 1, N) #define NNUM2(P, X, NNN, N) NNUM1(P, X, NNN, 9) NUM(P, X, NNN, 2, N) #define NNUM3(P, X, NNN, N) NNUM2(P, X, NNN, 9) NUM(P, X, NNN, 3, N) #define NNUM4(P, X, NNN, N) NNUM3(P, X, NNN, 9) NUM(P, X, NNN, 4, N) #define NNUM5(P, X, NNN, N) NNUM4(P, X, NNN, 9) NUM(P, X, NNN, 5, N) #define NNUM6(P, X, NNN, N) NNUM5(P, X, NNN, 9) NUM(P, X, NNN, 6, N) #define NNUM7(P, X, NNN, N) NNUM6(P, X, NNN, 9) NUM(P, X, NNN, 7, N) #define NNUM8(P, X, NNN, N) NNUM7(P, X, NNN, 9) NUM(P, X, NNN, 8, N) #define NNUM9(P, X, NNN, N) NNUM8(P, X, NNN, 9) NUM(P, X, NNN, 9, N) #define NNUM(P, X, NNN, NN, N) NNUM##NN(P, X, NNN, N) #define NNNUM0(P, X, NN, N) NNUM(P, X, 0, NN, N) #define NNNUM1(P, X, NN, N) NNNUM0(P, X, 9, NN) NNUM(P, X, 1, NN, N) #define NNNUM2(P, X, NN, N) NNNUM1(P, X, 9, NN) NNUM(P, X, 2, NN, N) #define NNNUM3(P, X, NN, N) NNNUM2(P, X, 9, NN) NNUM(P, X, 3, NN, N) #define NNNUM4(P, X, NN, N) NNNUM3(P, X, 9, NN) NNUM(P, X, 4, NN, N) #define NNNUM5(P, X, NN, N) NNNUM4(P, X, 9, NN) NNUM(P, X, 5, NN, N) #define NNNUM6(P, X, NN, N) NNNUM5(P, X, 9, NN) NNUM(P, X, 6, NN, N) #define NNNUM7(P, X, NN, N) NNNUM6(P, X, 9, NN) NNUM(P, X, 7, NN, N) #define NNNUM8(P, X, NN, N) NNNUM7(P, X, 9, NN) NNUM(P, X, 8, NN, N) #define NNNUM9(P, X, NN, N) NNNUM8(P, X, 9, NN) NNUM(P, X, 9, NN, N) #define NNNUM(P, X, NNN, NN, N) NNNUM##NNN(P, X, NN, N) //#####################Q var count#################### #define QA(X) NNNUM(qA, X, 0, 1, 6) #define QB(X) NNNUM(qB, X, 0, 1, 6) //#################################################### #define INIT(A) unsigned long long int A=EMPTY_STATE_VALUE; #define TEST(A) res[0]=A; //in code QB(INIT); QA(TEST);