原创 可变数目变元

2010-9-27 14:04 1806 13 13 分类: MCU/ 嵌入式


宏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条评论)

登录后参与讨论
我要评论
0
13
关闭 站长推荐上一条 /2 下一条