在函数原型中,列出了函数期望接收的参数,但是原型只能显示固定数目的参数。
在c语言中能不能在不同的时候接收不同数目的参数呢?答案是肯定的
stdarg宏
可变的参数列表是通过宏来实现的,这些宏定义与 stdarg.h头文件,它是标准库的一部分
这个头文件声明了一个类型va_list 和 三个宏-------- va_star va_arg va_end.
下面是书本的一个例子
//计算指定数量的值的平均值
处理的参数默认为整形,如果不是整形就会发生类型的提升。如果指定了错误的类型,那么其结果是不可预测的。
在c语言中能不能在不同的时候接收不同数目的参数呢?答案是肯定的
stdarg宏
可变的参数列表是通过宏来实现的,这些宏定义与 stdarg.h头文件,它是标准库的一部分
这个头文件声明了一个类型va_list 和 三个宏-------- va_star va_arg va_end.
下面是书本的一个例子
//计算指定数量的值的平均值
#include<stdarg.h>
float average(int n_values,...)//...代表传递数量和类型未确定的参数
{
va_list var_arg;
int count;
float sum = 0;
//准备访问可变参数
va_start(var_arg,n_values);
//从头到尾,依次访问可变列表的值
for(count = 0; count < n_values; count ++ )
{
sum += va_arg(var_arg,int);
}
//完成处理可变参数
va_end(var_arg);
return sum / n_values;
}
处理的参数默认为整形,如果不是整形就会发生类型的提升。如果指定了错误的类型,那么其结果是不可预测的。