ISO C中定义的可变参数宏:
-
#define debug(format, ...) fprintf(stderr, format, __VA_ARGS__)
GCC支持更复杂的形式,可以给可变参数取个名字:
-
#define debug(format, args...) fprintf(stderr, format, args)
有了名字,代码显得更具有可读性(include/linux/kernel.h):
-
#define pr_info(fmt, arg...) printk(KERN_INFO fmt, ##arg)
使用“##”的原因是处理arg 不代表任何参数的情况,前面的逗号就变得多余了。使用“##”之后,GCC预处理器会丢弃前面的逗号,这样,代码:
pr_info("success!\n")
会被正确地扩展为:
printk(KERN_INFO "success!\n")
而不是:
printk(KERN_INFO "success!\n",)
阅读(1583) | 评论(0) | 转发(0) |