ANSI C 只支持可变参数的函数:
EG: int printf( const char *format [, argument]...);
在GNU C中,宏是也可以支持可变参数:
EG: #define self_printf(tmp,arg...) printk(tmp,##arg)
arg表示其余参数可以是任意个,这些参数以及参数之间的逗号构成arg的值,在宏扩展时替换arg,比如:self_printf("%s:%d",num1,num2) 会扩展成 printk("%s:%d",filename,line);
使用"##"的原因是处理arg不代表任何参数的情况时,前面的逗号变得多余,使用“##”之后,GNU C预处理
器会丢弃前面的逗号,例如self_printf("HelloWorld!\n")!会被扩展成printk("HelloWorld!\n");
而不是扩展成printk("HelloWorld!\n",);
阅读(964) | 评论(0) | 转发(0) |