C标准库学习--可变参数函数的实现方法

xiaoxiao2021-02-28  67

标准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

转载请注明原文地址: https://www.6miu.com/read-41071.html

最新回复(0)