要利用C语言的可变参数,我们必须首先导入stdarg.h文件,其中定义了
typedef char * va_list;
#define _INTSIZEOF(n) /
((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) )
#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )
#define va_arg(ap,t) /
( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
#define va_end(ap) ( ap = (va_list)0 )
可以写个函数测试一下
void print(int arg1, ...);
void main(){
print(3, "aaa", "bbb", "ccc"); }
void print(int arg1, ...){
va_list arg_ptr;
char* str= NULL;
va_start(arg_ptr, arg1);
for(int i = 0; i < arg1; i++){
str = va_arg(arg_ptr, char*);
printf("%s ", str);
}
va_end(arg_ptr);
}
由于我们不知道调用者用传几个参数,所以用第一个参数指定参数个数,还有一种方法是让最后一个参数为NULL,例如:
void print(int arg1, ...);
void main(){
print(5, "aaa", "bbb", "ccc",NULL);
}
void print(int arg1, ...){
va_list arg_ptr;
char* str= NULL;
va_start(arg_ptr, arg1);
for(;;){
str = va_arg(arg_ptr, char*);
if(!str) break;
printf("%s ", str);
}
va_end(arg_ptr);
}