大家经常使用的printf函数就是典型的可变参数函数。使用这个特性可以将可变个数的参数填充到字符串中的指定位置。
我们首先研究下《征服C指针》者中这部分内容。
书中写了一个山寨版的printf函数来解释可变长参数函数。
先贴上代码。
#include <stdio.h>
#include <stdarg.h>
#include <assert.h>
void tiny_printf(char *format, ...){
int i;
va_list ap;
va_start(ap, format);
for(i = 0; format[i] != 0; i++){
switch (format[i]){
case 's':
printf("%s ", va_arg(ap, char*));
break;
case 'd':
printf("%d ", va_arg(ap, int));
break;
default:
assert(0);
}
}
va_end(ap);
putchar('\n');
}
int main(){
tiny_printf("sdd", "result..", 3, 5);
return 0;
}
这里assert.h提供断言支持,要使用变参功能要加入stdarg.h头文件。
根据程序可知运行结果为:
result.. 3 5
stdarg.h相关的资料可以参考