c语言—stdarg宏(函数可变参数实现)

来源:互联网 发布:库里1516赛季每场数据 编辑:程序博客网 时间:2024/05/21 21:49


可变参数列表可通过宏来实现,这些宏定义在stdarg.h头文件中,它是标准库的一部分。这个头文件声明了一个类型va_list和三个宏----va_start,va_arg,va_end.可以声明一个类型为va_list的变量,与这几个宏配合使用,访问参数的值。参数列表的可变部分位于一个或多个普通参数(命名参数)的后面(即参数列表中至少要有一个命名参数),它在函数原型中以一个省略号表示。

例如:定义一个函数acerage可以计算若干个整数的平均值:

#include <stdarg.h>float average(int n_value,...){va_list var_arg;int count;float sum=0;va_start(var_arg,n_value);for(count =0;count<n_value;count++){sum+=va_arg(var_arg,int);}va_end(var_arg);return sum/n_values;}


说明:函数声明一个名叫var_arg的变量,它用来访问参数列表的未确定部分。这个变量通过调用va_start来初始化。它的第一个参数是va_list 类型变量的名字,第二个参数是省略号前最后一个有名字的参数。初始化过程把变量var_arg设置为指向可变参数部分的第一个参数。
    为了访问参数,需要使用va_arg,这个宏接受两个参数:va_list类型变量和参数列表中下一个参数的类型。在这个例子中,所有的可变参数都是整型。va_arg返回这个参数的值,并使var_arg指向下一个可变参数。

   最后,当访问完毕最后一个可变参数之后,需要调用va_end.

</pre><p></p><div style="top: 0px;"><p>可变参数列表可通过宏来实现,这些宏定义在stdarg.h头文件中,它是标准库的一部分。这个头文件声明了一个类型va_list和三个宏----va_start,va_arg,va_end.可以声明一个类型为va_list的变量,与这几个宏配合使用,访问参数的值。</p><p>例如:定义一个函数acerage可以计算若干个整数的平均值:</p><p></p><pre name="code" class="cpp">#include <stdarg.h>float average(int n_value,...){va_list var_arg;int count;float sum=0;va_start(var_arg,n_value);for(count =0;count<n_value;count++){sum+=va_arg(var_arg,int);}va_end(var_arg);return sum/n_values;}


说明:函数声明一个名叫var_arg的变量,它用来访问参数列表的未确定部分。这个变量通过调用va_start来初始化。它的第一个参数是va_list 类型变量的名字,第二个参数是省略号前最后一个有名字的参数。初始化过程把变量var_arg设置为指向可变参数部分的第一个参数。
    为了访问参数,需要使用va_arg,这个宏接受两个参数:va_list类型变量和参数列表中下一个参数的类型。在这个例子中,所有的可变参数都是整型。va_arg返回这个参数的值,并使var_arg指向下一个可变参数。

   最后,当访问完毕最后一个可变参数之后,需要调用va_end.



0 0
原创粉丝点击