清泛IT社区App Inventor 2 中文社区

搜索

扫码访问移动社区 移动社区,您的掌上技术专家

关注我,精彩不错过! 关注我,精彩不错过!

扫码安装最新版AI伴侣 最新版AI伴侣v2.72

Aia Store .aia 源码一站式解决方案 发布日志AI2连接测试ai2Starter模拟器

开通会员送SVIPApp Inventor 2 拓展有奖征文 VIP会员享专有教程,免费赠送基础版*技术支持服务! AI2入门必读中文文档中文教程IoT专题

查看: 1265|回复: 1
打印 上一主题 下一主题

关于 __VA_ARGS__ 宽字符版本的问题

  • TA的每日心情
    开心
    2024-03-14 20:36
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    70

    主题

    117

    帖子

    1420

    积分

    AppInventor2 SVIP会员

    积分
    1420
    跳转到指定楼层
    楼主
    发表于 2015-01-10 21:00:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 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);
    }


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



  • TA的每日心情
    开心
    2024-02-17 18:16
  • 签到天数: 14 天

    [LV.3]偶尔看看II

    546

    主题

    715

    帖子

    1万

    积分

    管理员

    这里没有广告...

    Rank: 9Rank: 9Rank: 9

    积分
    10709
    QQ
    沙发
    发表于 2015-07-24 23:19:42 来自手机 | 只看该作者
    testlang_wechat_threadmessage
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    © 2024 tsingfun.com, Inc.  沪ICP备2020034476号-1  沪公网安备31011702000040号

    GMT+8, 2024-11-22 08:48 , Processed in 0.019425 second(s), 33 queries .