VC6 实现TRACE 文件、行号,

    技术2025-10-30  5

    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/

    最新回复(0)