print的可变参数

来源:互联网 发布:减肥过快皮肤松弛 知乎 编辑:程序博客网 时间:2024/05/21 14:08

867 行,pr_info只是一个打印信息的宏,printk的变体,在 include/linux/kernel.h里定
义:
242 #define pr_info(fmt,arg...) \
243
printk(KERN_INFO fmt,##arg)


这个可变参数宏要不要说一下?地球人都知道了,不过还是聊一下吧,我有多话症。99 年

的 ISO C 标准里规定了可变参数宏,和函数语法类似,给个例子
#define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
里面的“...”就表示可变参数,调用时,它们就会替代宏体里的__VA_ARGS__。GCC 总
是会显得特立独行一些,它支持更复杂的形式,可以给可变参数取个名字,再给个这种形式
的例子
#define debug(format, args...) fprintf (stderr, format, args)
是不是显得更容易读了些?有了名字总是会容易交流一些。
是不是与咱们的 pr_info 比较接
近了?除了‘##’
,它主要是针对空参数的情况。既然说是可变参数,那传递空参数也总
是可以的,空即是多,多即是空,股市里的哲理这里同样也是适合的。如果没有‘##’
,
传递空参数的时候,比如
debug ("A message");
28
宏展开后,里面的字符串后面会多个多余的逗号。这个逗号你应该不会喜欢,它这是表错情
了,而‘##’则会使预处理器去掉这个多余的逗号。
原创粉丝点击