众所周知,c没有c++的重载函数,所以函数有不定长度的参数会很难办。
不知你是否看到过这种定义函数的方式:int printf( const char* format, ...);
这是正确的定义,它定义了一个支持可变长度的printf函数。
printf("%d",i);
printf("%s",s);
printf("the number is %d ,string is:%s", i, s);
三种调用方式显示都是正确的。
但是我们怎么去得知,并且取printf函数...指代的参数呢??
首先介绍c中的几个宏: 它们在定义在stdarg.h中。
void va_start( va_list arg_ptr, prev_param );
type va_arg( va_list arg_ptr, type );
void va_end( va_list arg_ptr );
这里我们写一个函数,该函数至少有一个整数参数,第二个参数也是整数,是可选的.函数只是打印这两个参数的值.
void va_func(int i, ...) {
va_list arg_ptr;
int j=0;
va_start(arg_ptr, i);
j=va_arg(arg_ptr, int);
va_end(arg_ptr);
printf("%d %d\n", i, j);
}