VC6 实现TRACE 文件、行号,__VA_ARGS__ Walkaround
VC6 不支持C99 没有可变长的宏参数 __VA_ARGS__
可以使用下面的Walkaround来解决
采用的方法比较巧妙,使用匿名对象和重载()操作符来达到和TRACE函数相同的效果,同时还能正确打印文件和行号。
#include <stdio.h>
#include <windows.h>
#define _DEBUG_BUF_SIZE_ 2048
static char _buf_[_DEBUG_BUF_SIZE_];
class trace_impl
{
public:
trace_impl(const char* file,size_t line):file_(file),line_(line)
{
}
inline void operator() (const char* format,...) const
{
va_list ap;
va_start(ap,format);
vsprintf(_buf_,format,ap);
va_end(ap);
OutputDebugStringA(_buf_);
sprintf(_buf_," in %s(%d)/n",file_,line_);
OutputDebugStringA(_buf_);
}
private:
const char* file_;
size_t line_;
};
#define TRACE trace_impl(__FILE__,__LINE__)
代码的实现参考台湾的一篇博客,
更详细的信息请参考:http://www.jeffhung.net/blog/articles/jeffhung/1012/