zoukankan      html  css  js  c++  java
  • 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 就会出现模板菜单,在里面可以定制快捷键插入模板代码。

     

  • 相关阅读:
    用C#生成足够随机的互不相同的随机数
    CRM
    Asp.net2.0部署时TreeView控件无法正常显示没有图片的问题
    javascript解析json
    jQuery插件倒计时。
    ASP.NET MVC + jQuery + Newtonsoft.Json 快乐的AJAX
    .NET中DataSet转化Json工具类
    jQuery load html
    jQuery 使用注意点技巧1
    WEB页面多语言支持解决方案
  • 原文地址:https://www.cnblogs.com/kuliuheng/p/5592504.html
Copyright © 2011-2022 走看看