gnu printf可变参数宏

Posted 天地有大美而不言

tags:

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

可变参数的宏

标准C只支持可变参数的函数,意味着函数的参数可以是不固定的

例如printf()函数的原型是int printf(const char *format [,argument]...)

而在GNU C中,宏也可以接受可变数目的参数,例如

#define pr_debug(fmt,arg...) printk(fmt,##arg)

这里arg表示其余的参数可以是零个或多个,这些参数以及参数之间的逗号构成arg的值,在宏扩展时替换arg ,例如

pr_debug("%s:%d",filename,line);被扩展为printk("%s:%d",filename,line);

使用##的原因是为了处理arg不代表任何参数的情况,这时候,前面的逗号就变得多余了。

使用##之后,GNU C预处理器会丢弃前面的逗号,这样代码pr_debug("success!/n") 会被正确扩展为 printk("success!/n")

而不是 printk("success!/n",);

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

可变宏

变参函数和可变参数宏

变参函数和可变参数宏

自定义print macro,两对括号,单参数macro指定参数macro可变参数宏

用于打印可变参数的宏,可选择无参数

C++可变参数使用总结