// 可变参头文件 <stdarg.h>
// 主要依赖五个宏: va_list,va_start, va_arg, va_end, va_copy
// 其中 va_copy 是 c99 新引进的
// 可以结合 vsnprintf 一起使用用于打印日志
// va_list
// 本质为char*指针,指向可变参的列表,用于声明变量
// eg. va_list ap;
// va_start
// 获取可变参数列表的第一个参数的地址, para为可变参数最左边的参数,即...之前的最后一个参数
// eg. va_start(ap, para)
// va_arg
// 获取可变参数的当前参数并将指针指向下一参数, type为当前参数的类型
// eg. va_arg(ap, type)
// va_end
// 与清空va_list的参数列表,与va_start配合使用
// eg. va_end(ap)
// va_copy
// 复制 va_list 的变量
// eg. va_copy(des, src)
#include <stdio.h>
#include <stdarg.h>
void printint(int arg, ...)
{
int t;
va_list ap;
va_start(ap, arg);
for(;;)
{
t = va_arg(ap, int);
if(t == 0)
break;
printf("%d ", t);
}
printf("
");
va_end(ap);
}
int main()
{
printint(1,2,3,4,5,0);
printint(34,12,0);
return 0;
}
// output:
// 2 3 4 5
// 12