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