实现类似printf的可变参数,只需要5步:
1)#include <stdarg.h>
2)在函数里定义一个VA_LIST型的变量,这个变量是指向参数的指针;
3)用VA_START宏初始化变量刚定义的VA_LIST变量;
4)用VA_ARG依次返回可变的参数,VA_ARG的第二个参数是你要返回的参数的类型
如果我们不需要一一详解每个参数,只需要将可变列表拷贝至某个缓冲,可用vsprintf函数;
5)最后用VA_END宏结束可变参数的获取。
示例程序
1 #include <stdio.h> 2 #include <stdarg.h> 3 4 int calcAverage(int num, ...); 5 6 int main() 7 { 8 int n = calcAverage(3, 1,23,3); 9 printf("%d ", n); 10 getchar(); 11 12 return 0; 13 } 14 15 int calcAverage(int num, ...) 16 { 17 va_list valist; 18 va_start(valist, num); 19 20 char buf[10]; 21 vsprintf_s(buf, 10, "%d,%d,%d", valist); 22 printf("%s ", buf); 23 24 int count=0; 25 for (int i=0; i<num; i++) 26 { 27 count += va_arg(valist, int); 28 } 29 va_end(valist); 30 return count/num; 31 }