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可变参数宏的主要内容,如果未能解决你的问题,请参考以下文章