标准C语言中函数定义要求参数的类型和个数都是固定的,但是有写时候我们并不能确定参数的具体个数和类型,因此需要定义可变参函数,为解决这个问题,C标准库引入了stdarg.h,这个头文件中定义了一些宏,用来实现定义可变参函数。典型的可变参函数如printf。但是C编译器要求可变参数至少需要有一个固定参数。那么要实现一个可变参函数,需要做那些操作呢,其实很简单,只要做以下3步操作即可。
1、取得可变参数列表的指针。可以通过调用va_start()函数获得。
2、对可变参数列表进行操作。通过va_arg()获取每一个参数,调用一次获取一个参数。你可以在任何时候停止调用va_arg(),来忽略后续的若干参数。
3、调用va_end()结束对可变参列表的引用。
有了这个步骤,实现一个可变参函数就比较简单了,那我们先看下上面这几个参数的原型。
va_list //用于指向可变参数列表
void va_start(va_list ap, last-required-parameter); //last-required-parameter 最后一个必须的参数
type va_arg(va_list ap, type); //type为参数类型
void va_end(va_list ap);
下面看一段例子,看看如何使用上面的函数实现可变参函数:
#include <stdarg.h>
#include <stdio.h>
int add_em_up(int count, ...)
{
va_list ap;
int i;
int sum = 0;
va_start(ap, count);
for(i = 0;i < count; i++)
{
sum += va_arg(ap, int);
}
va_end(ap);
return sum;
}
int main(int argc, char **argv)
{
int sum;
sum = add_em_up(5, 3,4,5,6,7);
printf("sum = %d\n", sum);
return 0;
}
结果输出:
sum = 25