设为首页 加入收藏

TOP

Linux C中如何定义可变参数的宏
2014-11-24 00:58:15 来源: 作者: 【 】 浏览:3
Tags:Linux 如何 定义 可变 参数

一般在调试打印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)去除掉它前面的那个逗号.


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Cmake 设置交叉编译环境 下一篇Java多线程:一道阿里面试题的分..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: