C预处理器init数组
发布时间:2020-12-16 10:37:35 所属栏目:百科 来源:网络整理
导读:我正在写一个复杂的宏,我还需要传递数组初始化器.基本上我有困难: #define INIT_ARR(VAR_NAME,ARR_DATA) int VAR_NAME[] = ARR_DATA 那我就叫它 INIT_ARR(myNm,{1,2,3}); 但预处理器将任何逗号(也是花括号内的逗号)解释为新的宏参数,因此它给出了错误: err
我正在写一个复杂的宏,我还需要传递数组初始化器.基本上我有困难:
#define INIT_ARR(VAR_NAME,ARR_DATA) int VAR_NAME[] = ARR_DATA 那我就叫它 INIT_ARR(myNm,{1,2,3}); 但预处理器将任何逗号(也是花括号内的逗号)解释为新的宏参数,因此它给出了错误: error: #55-D: too many arguments in invocation of macro "INIT_ARR" 预处理器不会忽略()所以我可以这样做: #define INIT_ARR(VAR_NAME,ARR_DATA) int VAR_NAME[] = {ARR_DATA} INIT_ARR(myNm,(1,3)); 但后来它被解释为 int myNm[] = {(1,3)}; 哪个不适合C. 有办法怎么做?例如从参数中删除大括号? 解决方法
我想我破解了它:
#define myArgs(...) __VA_ARGS__ #define INIT_ARR(VAR_NAME,ARR_DATA) int VAR_NAME[] = {myArgs ARR_DATA} INIT_ARR(myArr,3,4)); 将被正确解释为: int myArr[] = {1,4}; annoying_squid’s answer帮我搞清楚了…… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |