stdarg.h 头文件定义了一个变量类型 va_list 和三个宏,这三个宏可用于在参数个数未知时获取函数中的参数。
可变参数的函数在参数列表的末尾是使用省略号(......)定义的。
库变量
va_list 这是一个适用于va_start(), va_arg() 和 va_end()这三个宏存储信息的类型。
库宏
void va_start(va_list ap, last_arg)初始化ap变量,它与va_arg和va_end宏是一起使用的。last_arg是最后一个传递给函数的已知的固定参数,即省略号之前的参数。
这个宏必须在使用va_arg 和 va_end 之前被调用。
int Sum(int num_args, ...)
{
int i, val = 0;
va_list ap;
va_start(ap, num_args);
for(i = 0; i < num_args; i++)
{
val += va_arg(ap, int);
}
va_end(ap);
return val;
}
void main()
{
printf("10, 20, 30的和为 %d\n", Sum(3, 10, 20, 30));
printf("4, 5, 6, 7的和为 %d\n", Sum(4, 4, 5, 6, 7));
getchar();
}
![](https://img.haomeiwen.com/i13613752/0938d83592a1c82b.png)
type va_arg(va_list ap, type)检索函数参数列表中类型为type的下一参数。它无法判断检索到的参数是否是传给函数的最后一个参数。
void va_end(va_list ap) 允许使用va_list宏的带有可变参数的函数返回。如果从函数返回之前没有调用va_end, 则结果为未定义。
网友评论