还在苦苦敲代码开发APP?你out啦! 试试积木搭建APP吧~

关于 __VA_ARGS__ 宽字符版本的问题

来源:清泛原创     2016-06-07 13:05:48    人气:     我有话说( 0 人参与)

在写一个可变参数的记录日志函数,考虑到宽字符(Unicode版本)时:#define WIDEN2(x) L ## x#define WIDEN(x) WIDEN2(x)#define __...

在写一个可变参数的记录日志函数,考虑到宽字符(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__</a> 应该是没有对应宽字符版本可以用的,它本身传递的可变参数是不论单 / 宽字符的。
所以单从这个方向入手貌似行不通,换个思路,找一个可以匹配单 / 宽字符的可变参数处理函数便可以解决,如下:

#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);
}


此函数可以通用于单 / 宽字符下的日志记录。

__VA_ARGS__ 宽字符

注:本文为本站或本站会员原创优质内容,版权属于原作者及清泛网所有,
欢迎转载,转载时须注明版权并添加来源链接,谢谢合作! (编辑:admin)
分享到: