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

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计算输入参数的和并返回:

 //mysum.c
#include <stdarg.h>
#include <stdio.h>
int mysum(int i, ...){
int r = ,j = ;
va_list pvar; va_start(pvar,i);
for(j=;j<i;j++){
r += va_arg(pvar,int);
}
va_end(pvar);
return(r);
} int main()
{
printf("sum(1,4) = %d\n",mysum(,));
printf("sum(2,4,8) = %d\n",mysum(,,)); return ;
}

运行结果如下:

最新文章

  1. Android随笔之——跨进程通信(一) Activity篇
  2. Java中 实现多线程成的三种方式(继承,实现,匿名内部类)
  3. 开发ASP.NET MVC设置统一的命名空间
  4. java-io-FileReader和FileWriter类
  5. 第三方框架 INTULocationManager 定位的一些方法
  6. linux安装gcc
  7. Cocos2dx 3.2 节点之间相互通信与设置触摸吞噬的方法
  8. cocos2d-x关于CCTableView的“乱序问题”的理解
  9. Cookie基础
  10. away 3d的一些问题
  11. xdebug 安装
  12. Linux 性能监测:CPU
  13. Rocketmq 集群
  14. grid - 隐式地命名网格区域名称
  15. 使用pickle模块存储对象
  16. Centos7.x 执行top命令教程
  17. (day20)javaEE三大组件之一Servlet (简介(二)servletconfig,servletContext,session,cookie,request,response,out)
  18. 对spring 对持久层的支持和数据库连接池的理解
  19. ACM数论之旅3---最大公约数gcd和最小公倍数lcm(苦海无边,回头是岸( ̄∀ ̄))
  20. Windows下面安装和配置MySQL(5.6.20)

热门文章

  1. 梦断代码3-message center消息的集中分发
  2. 瑞丽的SQL-基于窗体的排名计算
  3. 小菜学习MVC4-WebApi
  4. ubuntu 15.04开放mysql远程连接
  5. PP常用T-CODE
  6. 批量导出表数据到CSV文件
  7. C#程序实现动态调用DLL的研究[转]
  8. HomeSnap
  9. pt-table-checksum 与pt-table-sync
  10. 如何在 PHP 中处理 Protocol Buffers 数据