可变参数头文件stdarg.h
#include<stdarg.h> // 导入这个库,允许函数里面定义非固定长度的可变参数
三个宏和一个变量类型
va_list
: 保存传入的参数数据va_start
: 一个宏定义va_arg
: 一个宏定义va_end
: 一个宏定义
// 用法
type method(type1 arg1, type2 arg2, type3 lastarg, ...){
// ... 代表不定参数,其前面的lastarg就是最后一个确定参数
// 其用法为
......
va_list ap;
va_start(ap, lastarg); // 初始化ap
....
value = va_arg(ap, type) // 依次获取ap(...)中类型为type的参数
va_end(ap);
......
}
示例
#include<stdio.h>
#include<stdarg.h>
int my_Sum_Method(int count, ...){
int i;
int sum = 0;
va_list ap; // 定义类型ap
va_start(ap, count); // 依据lastarg初始化ap
for(i=0; i<count; ++i){
sum += va_arg(ap, int); // 获取ap中类型为type的参数做操作
}
va_end(ap); // end
return sum;
}
int main(){
printf("sum of %d %d %d and %d is %d\n",10,20,30,40, my_Sum_Method(4,10,20,30,40));
return 0;
}