安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

C使用宏参和构造有规律的字符串常量标识符常量值

2月6日 楚倾云投稿
  预处理符号:可以将宏参粘合成字符串的一部分。
  预处理符号:可以将宏参粘合成标识符、常量值的一部分。
  通常可以用于构造有规律的字符串、标识符、常量值。includestdio。hdefineMACR1(s)sdefineMACR2(a,b)abintmain(void){inthelloworld101;printf(s,MACR1(hello)world);helloworld,将宏参粘合成了一个字符串printf(d,MACR2(hello,world));101,将宏参粘合成了一个标识符printf(d,MACR2(10,1));101,将宏参粘合成了一个字面值常量return0;}
  在Linux内核中有一个使用和的真实案例,通过这个例子可以了解到和的价值所在。
  (1)没有和时的正常做法defineQDSPMODULEAUDPPTASK1defineQDSPMODULEAUDRECTASK2defineQDSPMODULEUDPREPROCTASK3structadspmoduleinfo{uint32};structadspmoduleinfomoduleinfo〔〕{{。nameAUDPPTASK,。pdevnameadspAUDPPTASK,。idQDSPMODULEAUDPPTASK},{。nameAUDRECTASK,。pdevnameadspAUDRECTASK,。idQDSPMODULEAUDRECTASK},{。nameUDPREPROCTASK,。pdevnameadspUDPREPROCTASK,。idQDSPMODULEUDPREPROCTASK}};
  从这个例子中可以看出,给结构体数组初始化的值的名字很有规律,比如:AUDPPTASKadspAUDPPTASKQDSPMODULEAUDPPTASK1
  基于这个规律完全可以使用和处理,在Linux内核中确实也是这么做的。
  (2)使用和处理后defineQDSPMODULEAUDPPTASK11defineQDSPMODULEAUDRECTASK22defineQDSPMODULEAUDRECTASK33defineQDSPMODULE(n){。namen,。pdevnameadspn,。idQDSPMODULEn}structadspmoduleinfo{uint32};structadspmoduleinfomoduleinfo〔〕{QDSPMODULE(AUDPPTASK),QDSPMODULE(AUDRECTASK),QDSPMODULE(UDPREPROCTASK)};
  使用和修改后,其实代码的执行效率并没有发生变化,但是使用了和后,确使得源码更加的简洁。
  在Linux内核、框架的CC源码中,大量充斥着这种用法,希望通过这里的介绍后,大家不再陌生这样的用法。
  如果宏的参数是另一个宏的话,通常需要加一层宏定义,才可以产生预想的效果:includestdio。hdefineNUM100defineSTR(num)numdefineSTR(num)STR(num)intmain(void){printf(s,STR(NUM));return0;}
  展开的过程:STR(NUM)STR(NUM)STR(100)100100
  如果没有加的这一层,NUM就没有展开的机会。
  再看:includestdio。hdefineTAG1infodefineTAG2teacherdefineSTRUCT(a,b)structabdefineSTRUCT(a,b)STRUCT(a,b)加的一层STRUCT(TAG1,TAG2){}intmain(void){return0;}
  展开的过程:STRUCT(TAG1,TAG2)STRUCT(TAG1,TAG2)STRUCT(info,teacher)structinfoteacherstructinfoteacher
  如果没有加的这一层,TAG1,TAG2就没有展开的机会。
  再看一个定义结构体的例子:structinfostudent{charname〔30〕;};structinfoteacher{charname〔30〕;};structinfoadministor{charname〔30〕;};
  比如像以上的这些例子,当需要定义好多结构体类型,而且这些结构体类型的格式还非常相似时(有规律可循),我们可以使用来简化操作,让代码变的更简洁:
  2)使用简化后defineSTRUCT(type)structinfotypeSTRUCT(student){charname〔30〕;};STRUCT(teacher){charname〔30〕;};STRUCT(administor){charname〔30〕;};intmain(void){return0;}
  预处理后的代码:structinfostudent{charname〔30〕;};structinfoteacher{charname〔30〕;};structinfoadministor{charname〔30〕;};intmain(void){return0;}
  ref
  https:www。hhcycj。compostitem382。html
  End
投诉 评论 转载

前途K50即将量产,国人真的需要国产电动超跑吗?前途K50即将量产,国人真的需要国产电动超跑吗?首先超跑这个词汇离普通人太远,无论是传统的燃油超跑,还是现在的新新能源产品电动超跑,价格都不低廉,可以说远远超过了绝大多数……没出事自动驾驶出了事辅助驾驶?谁来监管自动辅助驾驶?都市快报讯在汽车行业,自动驾驶堪称近年来最热的词汇之一,它被很多业内人士视为一场可以为出行带来革命式改变的技术。然而,几天前的一场意外交通事故,却让这项技术遭遇有史以来最多的质……美的1。5定频空调三级,奥斯克1。5变频空调三级,小米1。5本来大鱼吃小鱼、小鱼吃虾米的生态,出现了直接吃虾米的大鱼,看似人畜无害,却可以将小鱼饿死。整个生态变得单调无趣。这就是电商在欧美发达国家发展会受到限制的原因。小米自己并不……国际最新研究观测到极遥远星系约在宇宙大爆炸后9亿年形成中新网北京3月31日电(记者孙自法)国际著名学术期刊《自然》最新发表一篇天文学论文,研究人员报告了哈勃空间望远镜对一个极为遥远的单星或恒星系的观测情况,约在宇宙大爆炸后9亿年形……原银监会主席尚福林增强数字经济时代金融风险防控能力近日,全国政协经济委员会主任、原银监会主席尚福林在中国金融安全论坛暨国际金融30人论坛研讨会上,就数字金融时代如何增强金融风险防控能力发表了讲话。尚福林表示,目前,数字金……报应如此之快!美国无下限打压华为,国内企业开始抱团反制苹果在2018年的时候,美国就以各种理由限制华为等国产企业的发展,以华为为例,目前已经遭受到了美国的第五轮制裁,处境非常艰难,消费者业务包括手机、电脑、平板,都受到了全面的缩减,华……腾讯云连续四年排名中国音视频解决市场第一,头部厂商中RTC增腾讯云连续四年领跑中国音视频解决市场。1月11日,记者了解到,国际数据公司(IDC)发布的《中国视频云市场跟踪(2021上半年)》(下简称报告)显示,2021上半年中国视……火链科技成功通过CMMI3级认证研发能力获国际认可近日,火链科技成功获得CMMI3级认证,这标志着其在软件设计、开发、项目管理为用户提供高质量产品方面达到新水平,实现了与国际主流技术和管理要求的接轨。CMMI(Capab……比芯片垄断更严峻,美企几乎统治中国市场,3款国产系统正在崛起文BU审核张子扬校正知秋我国在芯片领域正饱受外资垄断之苦,在2020年,我国芯片的自给率不过30。不过,在另一个关键领域我国的受垄断程度,比芯片更为严峻,中国市场几乎被美……C使用宏参和构造有规律的字符串常量标识符常量值预处理符号:可以将宏参粘合成字符串的一部分。预处理符号:可以将宏参粘合成标识符、常量值的一部分。通常可以用于构造有规律的字符串、标识符、常量值。includestd……实体企业与互联网电商企业的生存差距正在缩小1,国家税务政策正在向有利于实体企业的方向靠近,互联网电商的从业人员税务宽松期正在结束,面临着与所有形式的企业公平竟争的开始,,,2,互联网电商企业的优势正在被实体企业的决策者……1000多元的手机和五六千元的手机,到底有什么区别?手机刚刚出现的时候,价格一直都非常高昂,当年一部大哥大能卖到几万元的价格,手机这种产品基本上就是大老板身份的象征,随后推出的小灵通由于低廉的价格风靡了一时,但是在智能手机来临以……
谷歌游戏放大招,云游戏随时随地玩,支持4K60fps科研人员提醒入侵物种小火蚁来了EInk彩色电子纸显示屏Spectra3100进入运输和零售我奶常山赵子龙获腾讯回应人脸确实是本人火星车所用金属玻璃齿轮扩大商用推进协作机器人发展DUI标注训练一体化平台全场景应用,识别体验持续提升shell实现定时清空文件内容,定时记录文件大小华为P30发布期间林斌发多条微博引争议本人回应芯片代工厂们酝酿更多提价,电子产品涨价潮也要来?31分钟充满5000mAh大电池!OPPOK10Pro系列首淘宝闯入微信!超主播斩首!破天荒事件不断年底裁员众生相有人躺平等被裁,有人寒冬找工作

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利