The commas in __VA_ARGS__
leads to wrong expansion of macro definition, like this
My_Stu_t my_stu = {
.member2 = {1},
3}( member3, {2,3} )
};
I hope the correct result should be like this
My_Stu_t my_stu = {
.member1 = {1},
.member3 = {2,3},
};
I know why this error is generated, but I don't know how to solve it, please help, thanks.
here is my code: test.c
typedef struct {
int member1[1];
int member2[1];
int member3[2];
} My_Stu_t;
#define MEMBER_AUX( a, b, c, ... ) c
#define MEMBER_WITHOUT_DEFAULT_VALUE( Name, ... )
#define MEMBER_WITH_DEFAULT_VALUE( Name, ... ) .Name = __VA_ARGS__,
#define MEMBER( Name, ... ) MEMBER_AUX( , ##__VA_ARGS__, MEMBER_WITH_DEFAULT_VALUE, MEMBER_WITHOUT_DEFAULT_VALUE )( Name, __VA_ARGS__ )
#define STD_MEMBER( ArrSize, Name, ... ) MEMBER( Name, ##__VA_ARGS__ )
My_Stu_t my_stu = {
STD_MEMBER( 1, member1)
STD_MEMBER( 1, member2, {1} )
STD_MEMBER( 2, member3, {2,3} )
};
preprocess output: gcc test.c -E
My_Stu_t my_stu = {
.member2 = {1},
3}( member3, {2,3} )
};