void AfxTrace(LPCTSTR lpszFormat, ...); //在头文件中声明
inline void AfxTrace(LPCTSTR, ...) { } //这个写在头文件中写在c文件中vs环境中会报错
void __cdecl AfxTrace(LPCTSTR lpszFormat, ...) //写在源文件中
{
// 格式化我们得到的数据
va_list args;
va_start(args, lpszFormat);
char szBuffer[512];
_vsnprintf(szBuffer, 512, lpszFormat, args);
// 输出到调试器
::OutputDebugString(szBuffer);
va_end(args);
}
#define _INTSIZEOF(n) ((sizeof(n) + sizeof(int) - 1)&~(sizeof(int) - 1))
其中va_start,va_arg,va_end实现方式是
#define va_start(ap,v) (ap=(va_list)&v+_INTSIZEOF(v))
#define va_arg(ap,t) (*(t*)((ap+=_INTSIZEOF(t)) - _INTSIZEOF(t)))
#define va_end(ap) (ap = (va_list) 0 )