1 typedef char * va_list; // TC中定义为void* 2 3 //为了满足需要内存对齐的系统 4 #define _INTSIZEOF(n) ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) ) 5 6 //ap指向第一个变参的位置,即将第一个变参的地址赋予ap 7 #define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) ) 8 9 // 获取变参的具体内容,t为变参的类型,如有多个参数,则通过移动ap的指针来获得变参的地址,从而获得内容 10 #define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) ) 11 12 //清空va_list,即结束变参的获取 13 #define va_end(ap) ( ap = (va_list)0 )