gun c语言中变参宏
c中支持变参宏和__VA_ARGS__
本人之前写过一篇关于c语言中宏用法的文章,需要的可以查看此篇文章>https://www.cnblogs.com/fulai-hou/articles/15520121.html>,这一篇主要讲gcc中专门支持的关于宏的参数的语法。
使用保留名__VA_ARGS__来将参数传递给宏
#define debug(...) printf(__VA_ARGS__)
实例:
PR("Howdy"); //宏展开后有一个参数printf("Howdy");
PR("weight = %d, shipping = $%.2f\n", wt, sp); //宏展开后有三个参数printf("weight = %d, shipping = $%.2f\n", wt, sp);
注意:在gcc中也支持这类表示,但是在g++中不支持此类表示方法。
#define dbgmsg(fmt, ...) printf(fmt, ##__VA_ARGS__)
#define dbgmsg(fmt, ...) printf("%s:%s:%05d", __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS_)
不使用__VA_ARGS__
仅gcc中支持
#define debug(format, args...) fprintf(stderr, format, ##args)
例如:
#define DBG_OUTPUT(fmt, args...) printf("File[%s:%s(%d)]:" fmt "\n", __FILE__, __FUNCTION__, __LINE__, ##args)
“##”会将可变参数列表连接在固定参数的后面,如果可变参数列表为空,"##"会将前面多余的“,”去掉
这和上面的宏一样的效果,但是这样写可读性强且描述方便。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架