标准 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",)此篇文章来源于华清远见文档