LINUX C中用define定义可变参数的宏

xiaoxiao2021-02-28  100

一般在调试打印Debug信息的时候, 需要可变参数的宏. 从C99开始可以使编译器标准支持可变参数宏(variadic macros), 另外GCC也支持可变参数宏, 但是两种在细节上可能存在区别. 1. __VA_ARGS__         __VA_ARGS__ 将 "..." 传递给宏 . 如         #define debug(format, ...) fprintf(stderr, format, __VA_ARGS__) 2. GCC的复杂宏         GCC使用一种不同的语法,从而可以给可变参数一个名字,如同其它参数一样.         #define debug(format, args...) fprintf (stderr, format, args)         这和第一条的宏例子是完全一样的,但是这么写可读性更强并且更容易进行描述. 3. ##__VA_ARGS__         上面两个定义的宏,如果出现 debug("A Message")的时候,由于宏展开后有个多余的逗号,所以将导致编译错误.         为了解决这个问题,CPP 使用一个特殊的"##"操作,格式如下:         #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)         这里,如果可变参数被忽略或为空,"##"操作将使预处理器(preprocessor)去除掉它前面的那个逗号. <script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script> 阅读(249) | 评论(0) | 转发(0) | 0

上一篇:Linux slab 分配器剖析

下一篇:Linux用户空间与内核空间

相关热门文章 test123编写安全代码——小心有符号数...使用openssl api进行加密解密...一段自己打印自己的c程序...彻底搞定C语言指针详解-完整版... 给主人留下些什么吧!~~ 评论热议
转载请注明原文地址: https://www.6miu.com/read-56820.html

最新回复(0)