尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
【2015-01-22】宏返回值和可变参数宏
[历史归档]本文原发布于 cstriker1407.info 个人博客内容为历史存档仅供参考。发布时间2015-01-22 标题宏返回值和可变参数宏分类编程 / C C 标签CC·宏宏返回值和可变参数宏宏返回值可变参数宏自己写的小测试宏返回值以下内容转自【 http://blog.csdn.net/fjb2080/article/details/5174171 】有删改。在使用逗号表达式中有一点需要注意的是在逗号表达式中不可以声明变量。例如intn(inta5,a);//这是错误的可以这样使用:intaintn(a5,a);那么n的值就是6另外在gcc中亦可用{}表达式作为返回值如#definefucn1(a)({aa5;a;})例如下面一个例子#includestdio.h#definefunc(a)({aa5;a;})intmain(void){//int i;//int a (i5, i);inta0;intbfunc(a);printf(a%d/n,a);printf(b%d/n,b);return0;}输出a5b5GCC对于宏返回值的描述【 http://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html 】可变参数宏以下内容转自【www.cnblogs.com/caosiyang/archive/2012/08/21/2648870.html 】有删改。C99中规定宏可以像函数一样带有可变参数比如#defineLOG(format,...)fprintf(stdout,format,__VA_ARGS__)其中…表示参数可变__VA_ARGS__在预处理中为实际的参数集所替换GCC中同时支持如下的形式#defineLOG(format,args...)fprintf(stdout,format,args)其用法和上面的基本一致只是参数符号有变化有一点需要注意上述的宏定义不能省略可变参数尽管你可以传递一个空参数这里有必要提到##连接符号的用法。##的作用是对token进行连接在上例中format、__VA_ARGS__、args即是token如果token为空那么不进行连接所以允许省略可变参数(__VA_ARGS__和args)对上述变参宏做如下修改#defineLOG(format,...)fprintf(stdout,format,##__VA_ARGS__)#defineLOG(format,args...)fprintf(stdout,format,##args)自己写的小测试#includestdio.hintcalcnum(inta,intb){aab10;bb5;returnb;}#defineCALCNUM(a,b)\({\aab10;\bb5;\b;\})#defineLOGA(format,...)printf(format,__VA_ARGS__)#defineLOGB(format,...)printf(format,##__VA_ARGS__)#defineLOGC(format,xx...)printf(format,##xx)/*重命名可变参数*/intmain(void){inta3,b5;intresultcalcnum(a,b);printf(result:%d a:%d b:%d ,result,a,b);a3,b5;resultCALCNUM(a,b);printf(result:%d a:%d b:%d ,result,a,b);/* 注意这里的ab和上面的值是不同的。 *//*无可变参数无法编译通过。*/// LOGA(Hello World A);LOGB(Hello World B );LOGC(Hello World C );LOGA(Hello World A%s,OMG);LOGB(Hello World B%s,OMG);LOGC(Hello World C%s,OMG);return0;}输出result:10a:3b:5result:10a:18b:10Hello World B Hello World C Hello World A OMG Hello World B OMG Hello World C OMG
RELATED

相关推荐

你的 assert 去哪儿了?——Python 优化模式下“隐身”的断言与致命的生产环境陷阱

你的 assert 去哪儿了?——Python 优化模式下“隐身”的断言与致命的生产环境陷阱

你的 assert 去哪儿了?——Python 优化模式下“隐身”的断言与致命的生产环境陷阱在 Python 中,assert 语句常被用作调试和契约检查的利器。我们在函数入口处断言参数非空,在返回前断言结果合理,在条件分支中断言某些不可能发生的…

📅 2026/9/30 11:00:39
Verilog带参数实例化:从入门到工业级RAM设计

Verilog带参数实例化:从入门到工业级RAM设计

1. 为什么“带参数实例化”是Verilog工程落地的分水岭?刚学Verilog时,很多人卡在“写完模块就完事”的阶段——仿真能跑通,综合能通过,但一到真实项目里就寸步难行。我带过十几届FPGA实习生,几乎所有人第一次接触多通道…

📅 2026/10/9 6:01:40
低功耗安全MCU实战:从选型到量产的关键设计与避坑指南

低功耗安全MCU实战:从选型到量产的关键设计与避坑指南

去年帮客户做一款无线传感器节点,对方提的需求特别直接:电池要撑一年以上,板子要做进一个硬币大小的空间里,还要能防住最基本的固件抄板。三个条件摆在一起,普通的通用MCU就有点不够看了。挑了一圈,最后还是…

📅 2026/11/1 0:12:26
MORE NEWS

更多资讯

📰

办电工证快速办理附近在哪考?实操考试心里没底怕挂科怎么办?

办电工证快速办理附近在哪考?实操考试心里没底怕挂科怎么办? 你是不是也这样,手上拿着电工证报名表,心里却发怵?实操考试那关,一不小心就挂科,轻则浪费钱,重则耽误工作机会。尤其是刚来洛阳的新人,办电工证快速办理附近在哪考?这成了你最关心的问题…

📰

武威电工证在哪里考的全流程办理指南

武威电工证在哪里考的全流程办理指南 工地太忙根本没时间复习考试,你不是一个人。我带过几十个南阳劳务班组的工人,每个人都在为电工证发愁。武威电工证在哪里考的?官方报名入口在哪?怎么高效备考?这些你都得搞清楚。…

📰

厦门考电工证通过率高不高 你在外省考的证能不能全国通用

厦门考电工证通过率高不高 你在外省考的证能不能全国通用 之前考的证在外省能不能转过来?这是很多在外地打工的老实人最关心的问题。尤其是像洛阳涧西区这些地方的建筑工人,跑遍了全国各地工地,证书在手,才能安心干活。但很多兄弟可能不知道,…

📰

重庆市低压电工证在哪考?电工证到期换证全攻略来了

重庆市低压电工证在哪考?电工证到期换证全攻略来了 你现在正愁着找不到合适的工作,手里又没有 重庆市低压电工证 ,这种焦虑你肯定感同身受。很多在建筑工地干活的工人,包括我在信阳干了五年的电工,都遇到过这种情况: 急需特种作业证才能上岗找工作…

📰

强电电工证考试流程实操考试考什么

30岁建筑电工怕考不过强电电工证?保姆级教程教你一次过 你怕考不过强电电工证白交培训费,对吧? 你可能已经在洛阳涧西区工地干了七八年电工,手上的工具早被磨得发亮,可就是那张强电电工证一直没拿到手。培训费花了,考试却总差那么一点。…

📰

电工证在哪报考好呢怎么选含金量高的培训机构

电工证在哪报考好呢怎么选含金量高的培训机构 怕考不过白交培训费,这是大多数准备考电工证的朋友最怕遇到的问题。电工证的含金量在不同行业里差别很大,选择对的培训机构、了解清楚报考流程和要求,才能避免走弯路。下面从平顶山学员的角度,帮你梳理出报考…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬