实现可以接受可变数量参数的函数
- 提供一个使用省略号的函数原型;
- 在函数定义中创建一个 va_list 类型的变量
- 用宏 va_start() 把该变量初始化为一个参数列表
- 用宏 va_arg() 访问参数列表
- 用宏 va_end() 完成清理工作
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
//varargs.c--use variable number of arguments
double sum(int, ...);
int main(int argc, char *argv[]) {
double s, t;
s = sum(3, 1.1, 2.5, 13.3);
t = sum(6, 1.1, 2.1, 13.1, 4.1, 5.1, 6.1);
printf("return value for"
"sum(3, 1.1, 2.5, 13.3):\t%g\n", s);
printf("return value for"
"sum(6, 1.1, 2.1, 13.1, 4.1, 5.1, 6.1):\t%g\n", t);
return 0;
}
double sum(int lim, ...)
{
va_list ap; //声明一个对象储存参数
double tot = 0;
int i;
va_start(ap, lim); // 把ap初始化为参数列表
for (i = 0; i < lim; i++)
{
tot += va_arg(ap, double); //访问参数列表中的每一项
}
va_end(ap);
return tot;
}
下面的该程序的输出:
return value forsum(3, 1.1, 2.5, 13.3): 16.9
return value forsum(6, 1.1, 2.1, 13.1, 4.1, 5.1, 6.1): 31.6