Chinaunix首页 | 论坛 | 博客
  • 博客访问: 708491
  • 博文数量: 90
  • 博客积分: 3225
  • 博客等级: 少校
  • 技术积分: 1200
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-20 11:04
个人简介

菩提本无树,明镜变非台 本来无一物,何处惹尘埃

文章分类

全部博文(90)

文章存档

2015年(1)

2014年(12)

2013年(15)

2012年(31)

2011年(8)

2010年(23)

分类: C/C++

2010-10-12 17:14:31

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) |
给主人留下些什么吧!~~