发现在windows win32桌面应用程序开发中,想调试输出信息,打印信息,在linux平台,windows控制台应用下能用的printf()函数输出不了,只能用OutputDebugString(),但这个函数只能输入固定的字符串,不能格式化输出,多少很不方便, 下面是我对于printf()在win32桌面开发中的个人实现方法: 定义一个宏 PRINTF
#include "framework.h"
#define PRINTF(f, ...) do{WCHAR wmsg[1024]={0}; \
wsprintf(wmsg, (f), ##__VA_ARGS__);OutputDebugString(wmsg);}while(0)
测试:
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine,
_In_ int nCmdShow)
{
const WCHAR *p = _T("你好");
int count = 1;
PRINTF(_T("%s,这是我的第%d篇博客!\n"), p, count);
return 0;
}
输出:你好,这是我的第1篇博客!
因为wsprintf() 和 OutputDebugString() 要求输入的字符串都是宽字符串即WCHAR, unicode 16位的字符串,所以PRINTF() 格式化输入的字符串也必须是宽字符串。