• 【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 }

    运行结果如下: 

  • 相关阅读:
    c#基础 里氏转换
    c#基础 base和this的区别,在继承上面
    c#基础值类和引用类型_字符串
    c# 基础字符串
    c#基础-构造函数 this new
    c#基础3-方法的重载静态和非静态,字段属性,方法
    c#基础2-out-ref
    .net的基础知识点
    Xamarin.Form的坑
    weboack 4 tutorial
  • 原文地址:https://www.cnblogs.com/baodaren/p/5197644.html
Copyright © 2020-2023  润新知