__va_args__是C/C++语言中的可变参数宏定义,也叫作可变参数列表(va_list)。它是用于函数中参数数目不确定时的技术手段,通过在函数中使用可变参数宏定义,可以传递不定数量的参数。
__va_args__常用于可变参数的函数(如printf,scanf等),也可以用于自定义函数中,是C语言和C++语言中很常用的一个技术。
使用__va_args__需要引入
1、va_list:定义一个指向可变列表的指针
2、va_start:指定可变参数列表的起始地址
3、va_arg:逐个获取参数的值,需要指定参数类型
4、va_end:释放可变参数列表
下面以计算多个整数、浮点数的平均值为例子进行说明:
#include <stdarg.h>#include <stdio.h>
double average(int num, ...)
va_list valist;
double sum = 0.0;
int i;
/* 为num个参数初始化valist */
va_start(valist, num);
/* 访问所有赋给valist的参数 */
for (i = 0; i < num; i++)
{
sum += va_arg(valist, double);
}
/* 清理为valist保留的内存 */
va_end(valist);
return sum / num;
int main()
printf("Average of 2, 3, 4, 5 = %f\n", average(4, 2.0, 3.0, 4.0, 5.0));
printf("Average of 5, 10, 15 = %f\n", average(3, 5.0, 10.0, 15.0));
return 0;
}
这段代码中定义了一个average函数,用于计算多个数的平均值。在函数中通过va_list定义一个指向可变参数列表的指针,通过va_start初始化指针,通过va_arg逐个获取参数的值,最后通过va_end释放指针。在主函数中分别调用average函数,传入不定数量的参数,并输出计算出来的平均值。
__va_args__是C/C++语言中常用的技术手段,用于函数中参数数目不确定时的处理,可以传递不定数量的参数。__va_args__需要引入