使用varargs.h/stdarg.h 实现可变参数函数

来源:互联网 发布:淘宝甜品店推荐 知乎 编辑:程序博客网 时间:2024/05/02 04:33

需求: 自己设置一个形如 printf()这样的函数,其函数的参数个数是可变的。第一个参数为字符串,里面有其他形参的数据类型信息。

参考代码如下:

#include<stdio.h>
#include<varargs.h>
void myPrintf (va_alist) va_dcl
{
 va_list ap;
 char *format;
 va_start(ap);
 format = va_arg(ap,char *);
 vfprintf(stdout,format,ap);
 va_end(ap);
}

解释:

定义可变参数函数时,,在函数定义的时候需要使用va_alist与va_dcl宏。

va_list ap:这句可以这么理解,ap中将存放所有的形参列表。ap通过va_start(ap)来初始化,使得ap中存在形参。 之后每次调用va_arg(),ap都会自动更新。

va_start:用来初始化形参列表

va_arg(),作用是对一个特定类型额形参列表进行存取。

 

这里我们使用了vprintf这样的函数,这样的函数可以直接使用va_list类型作为形参。

 

我们也可以使用stdarg.h进行可变参数函数

再举一个例子:求一系列int数的和。

#include<stdio.h>
#include<stdarg.h>

int sum(unsigned int num, ...)
{
 va_list ap;
 int sum =0;
 va_start(ap,num);
 while(num>0)
 {
  int t;
  num--;
  t = va_arg(ap,int);
  sum+=t;
 }
 return sum;
}

 

其中第一个形参代码共有几个数需要求和。va_start()有两个形参。 va_arg()需要显示地提供形参类型。

 

 

 

原创粉丝点击