x86平台下的宏定义:
typedef char* va_list;
/* 内存对齐;
* 与sizeof(int)对齐;
* 0 < sizeof(n) <= 4, _INTSIZEOF(n) = 4;
* 4 < sizeof(n) <= 8, _INTSIZEOF(n) = 8;
*/
#define _INTSIZEOF(n) ((sizeof(n)_sizeof(int)-1)&~(sizeof(int)-1))
/* 可变参数起始位置
* &v -- 最后一个固定参数的起始地址
* ap -- 可变参数起始位置
*/
#define va_start(ap, v) (ap = (va_list)&v + _INTSIZEOF(v))
/* 强制类型转换
* 移动参数指针ap指向下一个参数
*/
#define va_arg(ap, t) (*(t*)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)))
#define va_end(ap) (ap = (va_list)0)