cppcheck 代码静态检查

原创
2021/11/11 10:55
阅读数 766

开源社区下载、安装cppcheck

https://github.com/danmar/cppcheck/releases

 

运行脚本配置

#!/bin/bash
# 排除第三方库的检测
#cppcheck.exe -i src/thirds/ -I src/include/* src/* --enable=all -j 12 --std=c++14 --language=c++ --xml --xml-version=2 2>cppcheck-report.xls
# Common模块举例 -I 包含路径 -j 多核构建 --enable检测的类型 -i 禁止路径src\common\HttpLibrary\rapidjson
cppcheck.exe -I src/include/common/* src/common/Commons --enable=all -j 12 --std=c++14 --language=c++ --xml --xml-version=2 2>common-report.xls
#cppcheck.exe -i src/common/HttpLibrary/rapidjson/document.h src/common/HttpLibrary --enable=all -j 12 --std=c++14 --language=c++ --xml --xml-version=2 2>http-report.xls
 
查看结果 修复warrning和error
其中也包括静态代码检查的内存问题
 
常见的错误集合:
 

编译warnning处理集合,持续更新ing

--------warning C4477: “snprintf”: 格式字符串“%s”需要类型“char *”的参数,但可变参数 1 拥有了类型“const wchar_t *”
snprintf(sDebug, 1024, "Exception::invalid parameter call occurs, expression[%ls], function[%ls], file[%ls], line[%d]",
%s修改为%ls,注意传入是否为宽字符

--------warning C4067: 预处理器指令后有意外标记 - 应输入换行符
#if (!defined A) || (!defined B)  

--------warning C4091: “typedef ”: 没有声明变量时忽略“CEventManager::EventQueue”的左侧
typedef struct dd{
}dd_;//添加dd_即可


--------warning C4251: “CEvent::m_callback”: class“std::function<void (CEvent *)>”需要有 dll 接口由 class“CEvent”的客户端使用
因为导出dll内部的class组合对象必须是指针或者基础类型,否则都会报
处理方式一:通过pimpl技术将组合的对象都换成指针即可
处理方式一:屏蔽4251


--------it++建议改为++it,++前置
--------构造函数建议使用:进行构建,而非构造函数内部。
--------enum 加上class
--------NULL改为nullptr
--------拷贝构造和赋值拷贝要求必须书写,如果不需要自定义直接:
        //拷贝构造禁用
        CvSpdLog(CvSpdLog const&) = delete;
        //赋值拷贝禁用
        CvSpdLog& operator=(CvSpdLog const&) = delete;
--------使用锁建议锁的使用周期大于函数本身

 
展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部