变参的实现宏

参数是存放在栈中,从右至左存(即从左至右取)

typedefine  char* va_list;

#define_INTSIZEOF(n)  ((sizeof(n)+sizeof(int)-1)&~(sizeof(int)-1))       字节以(int)对齐

#define  va_start(ap, v)   (ap = (va_list)&v+  _INTSIZEOF(v))                     ap指向第一个参数

#define  va_arg(ap,t)     (*(t*)((ap+=_INTSIZEOF(t)) -  _INTSIZEOF(t)))   ap指向第二个参数,并返回第一个参数地址

#define  va_end(ap)   (ap = (va_list)0) 

你可能感兴趣的:(变参的实现宏)