对于C++开发中,肯定有时候需要用到 func(a,b,c, ... )这种不确定参数多少的时候,对于这种可变参数列表,va_list就是用来操作这种参数列表的工具。
va_list是类型定义, 我们先来定义一个变量:
va_list args;
此时 args 还未初始化,类似一个空指针,接下来我们要把这个‘’空指针|‘’ 指定到我们需要的位置上。示例中我们需要的位置是指到参数c后面。 va_start 就是专门干这活的。 当然,用完之后我们要把这个‘’指针‘’置空,用 va_end 来干。
va_start(args, c);
好了,args已经到位了,接下来就用args各种访问了(我们的目的就只是为了访问到这些参数而已)。用var_arg 来干。
var_arg(args,int); //每次返回一个int ( 根据实际情况确定类型) 参数并把位置往前推1,一般从前往后循环调用。
但是 var_arg本身并不知道在哪里结束,所以用while(1){ var_arg(args,int);} 会无限循环直到内存访问越界程序coredump。 最好就传参时传入一个专门用于标识结尾的参数 "12345678" 类似的。当返回值等于标识数时,结束访问。
访问完毕,不在需要使用了,狡兔死,猎狗烹; 用va_end干掉
va_end(args);
总结: 1、va_list 定义 临时变量;
2 、 va_start 指定位置
3、 va_arg 遍历访问
4、va_end 收尾工作