摘自《c语言精彩编程百例》,要定义可变参数的函数,在c++当中当包含<cstdarg>,在c语言当中当包含<stdarg.h>,使用任何可变长度的变元被访问之前,必须先用va_start()初始化变元指针argptr,argptr用va_list宏类型定义。初始化argptr后,经过va_arg()的调用,以作为下一个参数类型的参数类型,返回参数,最后取完所有参数并从函数返回之前,必须调用va_end()。如果未正确使用va_end(),程序可能瘫痪
#include<iostream>
#include <cstdarg>
using namespace std;
double sum_series(int num, ...);
int main()
{
double d;
//在子函数实际调用中共有五个参数,第一个为序列个数,其后为相加的各个数
d = sum_series(4, 0.5, 0.25, 0.125, 0.06254);
cout << "Sum of series is " << d << endl;
return 0;
}
double sum_series(int num, ...)
{
double sum = 0.0, t;
va_list argptr; //定义参变量
//初始化argptr
va_start(argptr, num);
//计算序列之后
for (; num;num--)
{
t = va_arg(argptr, double);
sum += t;
}
va_end(argptr); //序列关闭
return sum;
}