|
本帖最后由 zqp2013 于 2015-1-10 21:03 编辑
在写一个可变参数的记录日志函数,考虑到宽字符(Unicode版本)时:
#define WIDEN2(x) L ## x
#define WIDEN(x) WIDEN2(x)
#define __WFILE__ WIDEN(__FILE__)#define __WFUNCTION__ WIDEN(__FUNCTION__)
__LINE__, __FUNCTION__ 这些都可用使用这个宏拓展成宽字符版,__VA_ARGS__ 这样使用就会出现编译错误。
其实,据我所知 __VA_ARGS__ 应该是没有对应宽字符版本可以用的,它本身传递的可变参数是不论单 / 宽字符的。
所以单从这个方向入手貌似行不通,换个思路,找一个可以匹配单 / 宽字符的可变参数处理函数便可以解决,如下:
#define logging(x, ...) \
Log(__FUNCTION__, __LINE__, (x), __VA_ARGS__)
void Log(LPCSTR func, INT line, LPCTSTR fmt, ...)
{
// 设置地域,不然_vftprintf_s写不了中文
setlocale(0, "chs");
FILE *fp = NULL;
va_list args;
va_start(args, fmt);
// 中间无关紧要的,略。
_vftprintf_s(fp, fmt, args);
fclose(fp);
va_end(args);
}
此函数可以通用于单 / 宽字符下的日志记录。
|
|