首页 > 其他分享 >stdarg.h

stdarg.h

时间:2023-03-15 18:34:49浏览次数:27  
标签:va int char ap arg sizeof stdarg

// 定义 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;

标签:va,int,char,ap,arg,sizeof,stdarg
From: https://www.cnblogs.com/lance9527/p/17219550.html

相关文章

  • C++学习---变长参数(stdarg.h)的实现原理
    引用C++中对stdarg.h头文件进行了封装,该头文件实现了函数变长参数,能够在定义函数时不必完全指定参数个数,而编译器能够在代码编译时,拿到所有的参数,并进行相应的处理。stdarg......