用于在参数个数未知时获得函数的参数
基本介绍
va_list: 定义好的typedef,可以用来声明变量类型,用于以下三个宏。意义可以理解为指向各个参数的指针
void va_start(va_list ap, last_arg):初始化va_list 的变量,lastarg是最后一个固定参数,即省略号之前的数。
type va_arg(va_list ap, type):用某种类型来返回下一个参数,类型不对会导致错误。
void va_end(va_list ap):做一些收尾工作。
例子
#include <stdio.h>
#include <stdarg.h>
void myprint(char *format,...)
{
va_list ap;
char *p;
va_start(ap,format); //第二个参数是最后一个定义好的参数
for(p=format;*p;p++)
{
if (*p != '%') //模仿printf,认百分号
{
putchar(*p);
continue;
}
switch(*++p)
{
case 'd':
{
int tmp_int = va_arg(ap,int);
printf("int=%d",tmp_int);
break;
}
case 's':
{
char *tmp_char;
printf("char=");
for(tmp_char = va_arg(ap,char *);*tmp_char;tmp_char++)
putchar(*tmp_char);
break;
}
default:
putchar(*p);
break;
}
}
}
main()
{
int a = 0;
char *b = "123";
myprint("%d,%s",a,b);
}