__VA_ARGS__
中的逗号导致宏定义的错误扩展,如下所示
My_Stu_t my_stu = {
.member2 = {1},
3}( member3, {2,3} )
};
我希望正确的结果应该是这样的
My_Stu_t my_stu = {
.member1 = {1},
.member3 = {2,3},
};
我知道为什么会产生这个错误,但我不知道如何解决它,请帮助,谢谢。
这里是我的代码: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} )
};
预处理输出:gcc test. c-E
My_Stu_t my_stu = {
.member2 = {1},
3}( member3, {2,3} )
};
2条答案
按热度按时间unhi4e5o1#
让我们进入现代时代。
6tqwzwtp2#
关于
#define List( ... ) __VA_ARGS__
解预处理输出:gcc test. c-E