Here is a dummy example:
#define DEFINE_STRUCTURE(Result, Structure, a, b, c) int a;
#define MEMBER_INT(name, width) Int, name, width
You need to add one more step to the substitution process.
#define DEFINE_STRUCTURE(Result, Structure, a, b, c) int a;
#define MEMBER_INT(name, width) Int, name, width
#define DEFINE_STRUCTURE2(Result, Structure, x) DEFINE_STRUCTURE(Result, Structure, x)
DEFINE_STRUCTURE2(Result, Structure, MEMBER_INT(b, c))
Remember: on an invocation of a function-like macro, arguments are identified, then each argument is separately evaluated, then the parameters are substituted by the results of the evaluation.