这里的可变参数指的是参数的个数和类型不确定,
比如我们熟悉的printf,原型是int printf(const char *format, ...);
那么我们自己怎么实现呢?比如我写个函数名叫foo,参考printf写成如下格式,
void foo(const char *fmt,...)
{
}
然后我们需要使用stdarg.h这个头文件里的va_start,va_end这两个宏
我们写成这样
void foo(const char *fmt,...)
{
va_list ap;
va_start(ap,fmt);
va_end(ap);
}
va_start目的是用fmt来初始化ap。往后对可变参数的挨个获取,可以使用宏va_arg对ap进行操作来实现。
如果我们不想一个一个获取,就想获取可变参数拼接成的字符串,如printf输出到标准输出的结果那样。
那么我们需要借助vsnprintf这个函数,定义在stdio.h里。
我们写成这样
void foo(const char *fmt,...)
{
va_list ap;
va_start(ap,fmt);
char string[128] = {0};
vsnprintf(string,strlen(string)-1,fmt,ap);
va_end(ap);
printf("%s",string);
}
可变参数的用法就是这么的简单,快来试试吧。