__VA_ARGS__可变参数宏

Posted 我为自己代言

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了__VA_ARGS__可变参数宏相关的知识,希望对你有一定的参考价值。

#define qWiFiDebug(format, ...) qDebug("[WiFi] "format" File:%s, Line:%d, Function:%s", ##__VA_ARGS__, __FILE__, __LINE__ , __FUNCTION__);

__VA_ARGS__ 是一个可变参数的宏,很少人知道这个宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支持(VC6.0的编译器不支持)。宏前面加上##的作用在于,当可变参数的个数为0时,这里的##起到把前面多余的","去掉的作用,否则会编译出错, 你可以试试。

#define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)

这里,如果可变参数被忽略或为空,‘##’操作将使预处理器(preprocessor)去除掉它前面的那个逗号。如果你在宏调用时,确实提供了一些可变参数,GNU CPP也会工作正常,它会把这些可变参数放到逗号的后面。

摘自博客:http://blog.sina.com.cn/s/blog_661314940100qmfg.html

以上是关于__VA_ARGS__可变参数宏的主要内容,如果未能解决你的问题,请参考以下文章

找出可变参数宏中__VA_ARGS__的类型

__VA_ARGS__

glibc 中确定宏参数个数的宏__SYSCALL_NARGS 及 可变参数宏__VA_ARGS__

如何在文件系统中找到可变参数宏实现

C++ 预处理器 __VA_ARGS__ 参数数量

可变参数宏中的参数计数无效