// 定义 char * 指针类型
#define va_list char *

va_list ap;
char *ap;


// 指向可变参数的第一个
#define va_start(ap, last_arg) (ap = (va_list)&last_arg + sizeof(last_arg))

va_start(ap, n);
ap = (char *)&n + sizeof(n);


// ap 自增 sizeof(t),然后减去 sizeof(t),顺序获取参数的值
// ap 首先增加了 sizeof(t),然后又减去了 sizeof(t)。主要是为了在一个宏中能让 ap 向上增长,同时又可以获取当前参数的值。
#define va_arg(ap, t) (*(t *)((ap = (ap + sizeof(t))) - sizeof(t)))

int value = va_arg(ap, int);

// 取值
int value = *(int *)ap;
// 自增
ap += sizeof(t);


// 指针清零
#define va_end(ap) (ap = ((va_list)0))

va_end(ap);
ap = (char *)0;

posted on 2023-03-15 18:20  lance9527  阅读(29)  评论(0编辑  收藏  举报