SweetDream
高歌一壶新酿酒,醉抱青山不必归。

#define va_start _crt_va_start

#define va_arg _crt_va_arg

#define va_end _crt_va_end

 

typedef char *  va_list;

#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 )

 

 

#ifdef  __cplusplus
  #define _ADDRESSOF(v)   ( &reinterpret_cast<const char &>(v) )
#else
  #define _ADDRESSOF(v)   ( &(v) )

#endif 

#define _INTSIZEOF(n)   ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )  // 使得参数都是以int对其,不够sizeof(int)的部分当作一个int

 

使用过程: 

  va_list arg_ptr;

  va_start(arg_ptr, lastfixarg);

  va_arg(arg_ptr,argtype); 

  va_end(arg_ptr);  

 


 

posted on 2008-10-16 15:18  SweetDream  阅读(576)  评论(0编辑  收藏  举报