//头文件:stdarg.h cstdarg
//用途:用于参数个数不定的函数处理,可用来访问不知名也不知类型的参数列表
//函数形式如下:
return_type function_name ( parameter_declarations , ... );
va_list一般定义为一个指针,类型为char *
va_start , va_arg , va_end的定义如下:
//计算变量n的存储空间是int的多少倍,向上取整
#define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )
//ap是va_list类型,它用来获得栈中变量v的下一个变量的首地址
#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )
//t是一个具体的数据类型(如double),此宏获取ap当前指向的数据(类型为t)并指向下一个位置
#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
//清空ap
#define va_end(ap) ( ap = (va_list)0 )