1.首先定义一个va_list型的变量ap,这个变量是存储参数地址的指针.
2.然后用va_start宏取得1中定义的变量ap,这个宏的第二个参数是可变参数列表的前一个参数,即最后一个固定参数.
3.然后依次用va_arg宏使ap返回可变参数的地址,得到这个地址之后,结合参数的类型,就可以得到参数的值。
4.设定结束条件,判断是否为END=-1。注意被调的函数在调用时是不知道可变参数的正确数目的,程序员必须自己在代码中指明结束条件。
5.调用宏va_end。
#include <stdarg.h>
#include <stdio.h>
#define END -1
int Sum(int a,...)
{
int sum=0;
int tmp=0;
va_list ap;
va_start(ap,a);
do
{ tmp=va_arg(ap,int);
sum+=tmp;
} while (tmp!=END);
va_end(ap);
return sum;
}
void main()
{
printf("sum=%d\n",Sum(1,2,3,4,END));
printf("sum=%d\n",Sum(1,2,END));
}