函数参数不确定时用cstdarg(stdarg.h)

函数参数不确定时用cstdarg(stdarg.h),第1张

函数参数不确定时用cstdarg(stdarg.h),第2张

◎用法:
  func( Type para1, Type para2, Type para3, ... )
  {
  /****** Step 1 ******/
  va_list ap;
  va_start( ap, para3 ); //一定要“...”之前的那个参数
  /****** Step 2 ******/
  //此时ap指向第一个可变参数
  //调用va_arg取得里面的值
  Type xx = va_arg( ap, Type );
  //Type一定要相同,如:
  //char *p = va_arg( ap, char *);
  //int i = va_arg( ap, int );
  //如果有多个参数继续调用va_arg
  /****** Step 3 ******/
  va_end(ap); //For robust!
  }
  ◎研究:
  typedef char * va_list;
  #define va_start _crt_va_start
  #define va_arg _crt_va_arg
  #define va_end _crt_va_end
  #define _crt_va_start(ap,v) ( ap = (va_list)_ADDRESSOF(v) + _INTSIZEOF(v) )
  #define _crt_va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
  #define _crt_va_end(ap) ( ap = (va_list)0 )
  va_list argptr;
  C语言的函数是从右向左压入堆栈的,调用va_start后,
  按定义的宏运算,_ADDRESSOF得到v所在的地址,然后这个
  地址加上v的大小,则使ap指向第一个可变参数如图:
  栈底 高地址
  | .......
  | 函数返回地址
  | .......
  | 函数最后一个参数
  | ....
  | 函数第一个可变参数

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 函数参数不确定时用cstdarg(stdarg.h)

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情