其实,C++实现类似printf()函数的不定参数很简单,代码一写就明白了:
1 #define BUFFSIZE 4096
2
3 void Log2DebugView(const char* format, ...)
4 {
5 char buf[BUFFSIZE];
6 char* p = buf;
7 va_list args;
8 va_start(args, format);
9 vsprintf(p, format, args);
10 va_end(args);
11 //OutputDebugStringA(buf);
12 }
其中最核心的就是第7到第10行,解析format字符串中的格式化参数,如 %c, %d 等。最后得到的'buf',即是格式化后的字符串。比如调用了:
Log2DebugView("Test dbgview for id=%d, name=%s.", 5, "chosen"); 然后buf的内容便是: "
Test dbgview for id=5, name=chosen."。
至于最后的那句"OutptDebugString(buf);",是一个系统调用函数,主要用于将格式化后信息输出到Visual Studio的'output'窗口中(Debug模式下),或者输出到一个叫"dbgView.exe"的程序窗口中(运行模式下)。这对于我们调试来说是一个非常有用的工具,而且程序运行完后,这些格式化后的信息,还会保留在output或debView的窗口中,供我们分析。注:dbgView.exe可以在网上搜索并免费下载使用。