• Visual studio 下C++工程相关经验


    1. 利用vs2015编译C++检查宏参数错误

    Format Specifiers Checking

    #ifdef WIN32
    
    #pragma warning (error: 4473)
    #pragma warning (error: 4474)
    #pragma warning (error: 4475)
    #pragma warning (error: 4476)
    #pragma warning (error: 4477)
    #pragma warning (error: 4478)
    
    //#pragma warning (error: 4774)
    #pragma warning (error: 4775)
    #pragma warning (error: 4776)
    //#pragma warning (error: 4777)
    #pragma warning (error: 4778)
    
    /**< https://blogs.msdn.microsoft.com/vcblog/2015/06/22/format-specifiers-checking/ 利用vs2015 Format Specifiers Checking功能检测日志格式化错误 */
    
    #define HMI_LOGE(module, format, ...)               if(false){printf(format, ##__VA_ARGS__);}ALCLOGE(GLOG_MODULE_HMI, module, format, ##__VA_ARGS__)
    #define HMI_LOGW(module, format, ...)               if(false){printf(format, ##__VA_ARGS__);}ALCLOGW(GLOG_MODULE_HMI, module, format, ##__VA_ARGS__)
    #define HMI_LOGI(module, format, ...)               if(false){printf(format, ##__VA_ARGS__);}ALCLOGI(GLOG_MODULE_HMI, module, format, ##__VA_ARGS__)
    #define HMI_LOGD(module, format, ...)               if(false){printf(format, ##__VA_ARGS__);}ALCLOGD(GLOG_MODULE_HMI, module, format, ##__VA_ARGS__)
    #define HMI_LOGP(module, format, ...)               if(false){printf(format, ##__VA_ARGS__);}ALCLOGP(GLOG_MODULE_HMI, module, format, ##__VA_ARGS__)
    #define HMI_LOGDT(module, format, ...)               if(false){printf(format, ##__VA_ARGS__);}ALCLOGD(GLOG_MODULE_HMI, module, format, ##__VA_ARGS__)
    #define HMI_LOGET(module, format, ...)               if(false){printf(format, ##__VA_ARGS__);}ALCLOGE(GLOG_MODULE_HMI, module, format, ##__VA_ARGS__)
    
    #define HMI_LOGE_UNI(module, format, ...)           if(false){wprintf(format, ##__VA_ARGS__);}ALCLOGE16(GLOG_MODULE_HMI, module, format, ##__VA_ARGS__)
    #define HMI_LOGW_UNI(module, format, ...)           if(false){wprintf(format, ##__VA_ARGS__);}ALCLOGW16(GLOG_MODULE_HMI, module, format, ##__VA_ARGS__)
    #define HMI_LOGI_UNI(module, format, ...)           if(false){wprintf(format, ##__VA_ARGS__);}ALCLOGI16(GLOG_MODULE_HMI, module, format, ##__VA_ARGS__)
    #define HMI_LOGD_UNI(module, format, ...)           if(false){wprintf(format, ##__VA_ARGS__);}ALCLOGD16(GLOG_MODULE_HMI, module, format, ##__VA_ARGS__)
    #define HMI_LOGP_UNI(module, format, ...)           if(false){wprintf(format, ##__VA_ARGS__);}ALCLOGP16(GLOG_MODULE_HMI, module, format, ##__VA_ARGS__)
    #define HMI_LOGDT_UNI(module, format, ...)           if(false){wprintf(format, ##__VA_ARGS__);}ALCLOGD16(GLOG_MODULE_HMI, module, format, ##__VA_ARGS__)
    #define HMI_LOGET_UNI(module, format, ...)           if(false){wprintf(format, ##__VA_ARGS__);}ALCLOGE16(GLOG_MODULE_HMI, module, format, ##__VA_ARGS__)
    
    #else
    
    #define HMI_LOGE(module, format, ...)               ALCLOGE(GLOG_MODULE_HMI, module, format, ##__VA_ARGS__)
    #define HMI_LOGW(module, format, ...)               ALCLOGW(GLOG_MODULE_HMI, module, format, ##__VA_ARGS__)
    #define HMI_LOGI(module, format, ...)               ALCLOGI(GLOG_MODULE_HMI, module, format, ##__VA_ARGS__)
    #define HMI_LOGD(module, format, ...)               ALCLOGD(GLOG_MODULE_HMI, module, format, ##__VA_ARGS__)
    #define HMI_LOGP(module, format, ...)               ALCLOGP(GLOG_MODULE_HMI, module, format, ##__VA_ARGS__)
    #if !defined(PLATFORM_PIVI) || defined(GPLAT_APLUS3AUTO)
    #define HMI_LOGET(module, format, ...)               ALCLOGE(GLOG_MODULE_HMI, module, format, ##__VA_ARGS__)
    #define HMI_LOGDT(module, format, ...)               ALCLOGD(GLOG_MODULE_HMI, module, format, ##__VA_ARGS__)
    #else
    #define HMI_LOGDT(module, format, ...)               HSL_ALCLOGT_(GLOG_MODULE_HMI, module, format, ##__VA_ARGS__)
    #define HMI_LOGET(module, format, ...)               HSL_ALCLOGT_(GLOG_MODULE_HMI, module, format, ##__VA_ARGS__)
    #endif
    View Code

    1、链接其他库调试时产生告警: warning LNK4099: 未找到 PDB“vc100.pdb”

    解决方案:属性 -> C/C++ -> 输出文件 -> 程序数据库文件名 -> $(OutDir)$(TargetName).pdb  生成的pdb文件将同库在同一目录)

    2、文件编码问题: warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失

    解决方案:打开提示该Warning的文件,选择菜单中的:文件 -> 高级保存选项,将“编码”选择为“Unicode - 代码页 1200”,重新编译即可。(简体中文的可能也行)

    3、编译静态库时Release版反而比Debug版大很多

    解决方案:在VisualStudio中的Release工程中,C++ -> Optimization -> Whole Program Opeimization 默认是启用的,而Debug版的就没有这个标志,所以编译起来Release版反而大很多。具体原因是:LTCG(Link-time Code Generation),编译器需要启用/GL,连接器需要启用/LTCG,两者配合达到链接可执行程序时最终优化整合的效果,可以去除obj的重复,更好的优化代码。不过缺点就是链接速度慢。

    4、Visual assist 助手

      安装了番茄助手后,在菜单中选择 VAssistX -> Tools -> Edit VA Snippet 就会出现模板菜单,在里面可以定制快捷键插入模板代码。

     

  • 相关阅读:
    养生与健康
    vue + elementui 使用多选按钮实现单选功能
    生活小方
    和业务相关的工具函数
    vue + element ui开发过程中需要注意的几个点
    【转】webpack中关于source map的配置
    【转】移动前端手机输入法自带emoji表情字符处理
    webpack相关
    vue项目优化
    运维集群架构演变之美 【转】
  • 原文地址:https://www.cnblogs.com/kuliuheng/p/5592504.html
Copyright © 2020-2023  润新知