清泛IT社区
标题:
关于 __VA_ARGS__ 宽字符版本的问题
[打印本页]
作者:
zqp2013
时间:
2015-01-10 21:00
标题:
关于 __VA_ARGS__ 宽字符版本的问题
本帖最后由 zqp2013 于 2015-1-10 21:03 编辑
在写一个可变参数的记录日志函数,考虑到宽字符(Unicode版本)时:
#define WIDEN2(x) L ## x
#define WIDEN(x) WIDEN2(x)
#define __WFILE__ WIDEN(__FILE__)
#define __W
FUNCTION
__ 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);
}
此函数可以通用于
单 / 宽字符下的日志记录。
作者:
清泛网
时间:
2015-07-24 23:19
test
欢迎光临 清泛IT社区 (https://bbs.tsingfun.com/)
Powered by Discuz! X3.3