加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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帮我搞清楚了……

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读