1. 利用vs2015编译C++检查宏参数错误
#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
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 就会出现模板菜单,在里面可以定制快捷键插入模板代码。