在项目中,会遇到参数是省略号的函数, 这表述在告诉编译器,在函数调用时不检查该函数的实参与行参的个数和类型是否相同。
如何生声明函数:
void foo(int first, ...);
使用注意:在定义函数时,第一个参数必须指定类型。像 void foo(...) 就是错的。
如何定义函数:
#include<stdarg.h> //需要的头文件
void foo(int first, ...)
{
printf("first: %d\n", first);
va_list arg_ptr;
va_start(arg_ptr, first);
int next_parm;
do {
next_parm = va_arg(arg_ptr, int);
printf("next_parm : %d\n", next_parm);
} while(next_parm)
va_end(arg_ptr);
}
上面用到了 va_list类型, va_start, va_arg, va_end函数。
va_start函数将参数啊arg_ptr设置成可变参数列表的第一个参数,并且arg_ptr必须是va_list类型的。
va_arg函数将返回arg_ptr指向参数的值,并指向下一个参数。
va_end函数一般在函数结束时调用,作用将arg_ptr指向空。
如何调用函数:
foo(1, 2, 3, 4, 0);
注意:函数最后必须以零结尾。