这个东西很少用,每次都要到处找,所以这里做个记录。
可变参数值得是类似c语言里的printf(const char* format, ...)这样的参数,其中...表示参数个数可变。
宏也同样支持这样使用:
宏中的用法:#define LOG_OUT(format, ...) printf(format, ##__VA_ARGS__) 其中__VA_ARGS__表示可变参数。
在程序中,是通过var_start var_end var_arg 来获取...中的参数:
{
char tmp[1024];
memset(tmp, 0, 1024);
va_list pArgList;
va_start(pArgList, format);
vsnprintf(tmp, 1024, format, pArgList);
va_end(pArgList);
return std::string(tmp);
}
如果需要取得每一个参数可以使用var_arg,它需要传入一个va_list的变量和类型。如:如果需要int,可以这样调用
int a = va_arg(pArgList, int);
1 #include <cstdio>
2 #include <cstdlib>
3 #include <cstdarg>
4
5 void logMultiArgsOfInt(int num, ...)
6 {
7 va_list list;
8 va_start(list, num);
9 for (int i = 0; i < num; ++i) {
10 int t = va_arg(list, int);
11 printf("%d\n", t);
12 }
13 va_end(list);
14 }
15
16 int main(int argc, char **argv)
17 {
18 logMultiArgsOfInt(5, 1, 2, 3, 4, 5);
19 return 0;
20 }