【Unix环境高级编程】编写变长参数函数

文件的格式输入输出函数都支持变长参数。定义时,变长参数列表通过省略号'...'表示, 因此函数定义格式为:

type 函数名(parm1, parm2,parmN,...);

Unix的变长参数通过va_list对象实现,定义在文件'stdarg.h'中,变长参数的应用模板如下所示:

#include <stdarg.h>

function(parmN,...){
    va_list pvar;
    .................................
    va_start(pvar,parmN);
    while()
    {
         ..................
         f = va_arg(pvar,type);
         ...................
    }  
     va_end(pvar);
}    

    va_list数据类型变量pvar访问变长参数列表中的参数,宏va_start初始化变长参数列表,根据parmN判断参数列表的起始位置。va_arg获取变长列表中参数的值,type指示参数的类型,也使宏va_arg返回数值的类型。宏va_arg执行完毕后自动更新对象pvar将其指向下一个参数va_end关闭变长参数的访问。

下面这个实例mysum.c计算输入参数的和并返回:

 1 //mysum.c
 2 #include <stdarg.h>
 3 #include <stdio.h>
 4 int mysum(int i, ...){
 5     int r = 0,j = 0;
 6     va_list pvar;
 7     
 8     va_start(pvar,i);
 9     for(j=0;j<i;j++){
10         r += va_arg(pvar,int);
11     }
12     va_end(pvar);
13     return(r);
14 }
15 
16 int main()
17 {
18     printf("sum(1,4) = %d
",mysum(1,4));
19     printf("sum(2,4,8) = %d
",mysum(2,4,8));
20     
21     return 0;
22 }

运行结果如下: 

原文地址:https://www.cnblogs.com/baodaren/p/5197644.html