宏va_arg() va_start(0 va_end()一起作用,便可以完成向函数传入数目可变的变元操作。该三函数,包含在<stdarg.h>中。
type va_arg(va_list argptr, type);
void va_end(va_list argptr);
void va_start(va_list argptr, last_parm);
创建一个能获取可变数目变元的函数的通用过程如下:
在函数定义中,可变参数表之前必须有一个或多个已知参数,其中最右者为last_parm。在调用va_start()时,last_perm被用作第二个参数。
使用任何可变长度的变元之前,必须先用va_start()初始化变元指针argptr.初始化argptr后,经过对va_arg()的调用,以作为下一个参数类型的参数类型,返回参数。最后取完所有参数并从函数返回之前,必须调用va_end(),以确保堆栈的正确恢复。如果未正确使用va_end(),程序可能瘫痪。
DEMO源码如下:
#include <stdio.h>
#include <stdarg.h>
double sum_series(int num,...);
int main()
{
doulbe d;
d = sum_series(4,0.5,0.25,0.125,0.06254);
printf("Sum of series id %f.\n",d);
return 0;
}
double sum_series(int num,...)
{
double sum = 0.0;
va_list argptr; //定义参变量
//初始化argptr
va_start(argptr,num);
for ( ; num; num--)
sum += va_arg(argptr,double);
va_end(argptr); //序列关闭
return sum;
}
文章评论(0条评论)
登录后参与讨论