cppcheck的安装与使⽤⼀、cppcheck安装
环境:Ubuntu20.04,gcc-9.3.0/gcc-7.5.0
1、⽅法⼀:apt源安装cppcheck(推荐,⽆需编译安装,⾃动配置环境变量)
sudo apt install cppcheck
查看版本情况
cppcheck --version
2、⽅法⼆:编译安装cppcheck
⾸先,解压cppcheck压缩包
sudo tar-zxvf cppcheck-2.
解压完成之后,进⼊cppcheck⽂件夹
cd cppcheck-2.3/
可以看到,cppcheck包含,可以使⽤CMake编译
我们先创建⼀个build的⽂件夹,进⼊build的⽂件夹
mkdir build && cd build
下⾯进⾏编译,我这⾥gcc版本为9.3.0,经测试7.5.0也没问题
⾸先使⽤cmake ..命令将转换为make所需要的makefile
cmake ..
然后,通过make开始编译,-j是代表jobs,表⽰使⽤多少个线程进⾏编译
make-j 8
编译完成,进⼊bin⽬录下查看是否⽣成cppcheck的可执⾏⽂件
cd bin && ll
总⽤量 70912
drwxr-xr-x 2 inspur inspur 4096 3⽉ 25 14:15 ./
drwxr-xr-x 11 inspur inspur 4096 3⽉ 25 14:15 ../
-rwxrwxr-x 1 inspur inspur 72185664 3⽉ 25 14:15 cppcheck*
ok,编译安装完成!当然也可以将可执⾏⽂件添加到环境变量中使⽤,⽅便操作,操作如下。sudo vim /etc/profile
然后点击i键进⾏编辑状态,⽂件末尾输⼊
export CPPCHECK_HOME=编译⽣成可执⾏⽂件的⽬录,例如:/home/xxx/software/cppcheck-2.3/build/bin
按下Esc,输⼊:wq保存,然后执⾏source /etc/profile,即可直接使⽤cppcheck进⾏相关操作
⼆、cppcheck的使⽤
简述:cppcheck 是⼀种 C/C++ 代码缺陷静态检查⼯具。不同于 C/C++ 编译器及很多其它分析⼯具,它不检查代码中的语法错误。Cppcheck 只检查编译器检查不出来的 bug 类型,其⽬的是检查代码中真正的错误。
部分操作介绍,如需更多操作说明,请使⽤cppcheck --help进⾏查看
1、检查某⼀个c/c++⽂件
cppcheck file.c
2、检查⽂件夹中的所有⽂件
cppcheck path
cppcheck将递归检查path⽂件夹下所有源⽂件
3、启⽤消息
默认情况下,只显⽰错误消息,可以通过–enable命令启⽤更多检查
启⽤警告消息:
cppcheck --enable=warning file.c
启⽤性能消息:
cppcheck --enable=performance file.c
启⽤信息消息:
cppcheck --enable=information file.c
由于历史原因 --enable=style 可以启⽤警告、性能、可移植性和样式信息。当使⽤旧 XML 格式时,这些都由 style 表⽰:cppcheck --enable=style file.c
启⽤警告和性能消息:
cppcheck --enable=warning,performance file.c
cmake如何使用启⽤unusedFunction检查
cppcheck --enable=unusedFunction file.c
启⽤所有消息:
cppcheck --enable=all
4、将检查结果保存到⽂件中
cppcheck file.c 2>
5、多线程检查
cppcheck -j 4 path
多线程检查时,不会对ubusedFunction进⾏检查
6、CMake项⽬cppcheck检查的使⽤
⾸先,在同⽬录下,通过cmake⽣成项⽬的compile_commands.json⽂件
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
然后即可使⽤cppcheck对该项⽬进⾏检查
cppcheck --project=compile_commands.json
可通过重定向将检查结果导⼊到⽂件中
7、屏蔽某种错误
屏蔽syntax error: 命令⾏参数 --suppress=syntaxError
cppcheck --suppress=memleak:src/file1.cpp src/
8、使⽤ 统⼀屏蔽,--
⽰例:
noExplicitConstructor //suppress all noExplicitConstructor errors in all files
//suppress memleak and exceptNew errors in the file src/file1.cpp
memleak:src/file1.cpp
exceptNew:src/file1.cpp
格式:
[error id]:[filename]:[line]
[error id]:[filename2]
[error id]
三、常见错误修改
(1)隐式构造问题
⽰例: (style) Class 'Slice' has a constructor with 1 argument that is not explicit.
解决⽅法:在Slice构造函数前加上explicit,使其必须显⽰构造,当然这种有时并⾮必须显⽰构造
(2)变量未初始化问题
⽰例:(warning) Member variable 'TableFileCreationInfo::file_size' is not initialized in the constructor.解决⽅法:在构造函数中加⼊变量初始值
(3)变量/函数未使⽤问题
⽰例:(style) Unused variable: output
⽰例:(style) The function 'rocksmt_wal_iter_status' is never used.
解决⽅法:考虑后期是否还需要,不需要的及时删除,需要的保留
(4)raw loop问题
⽰例:(style) Consider using std::fill algorithm instead of a raw loop. [useStlAlgorithm]
⽰例:(style) Consider using std::transform algorithm instead of a raw loop. [useStlAlgorithm]
解决办法:将循环便利替换为STL标准库算法函数
(5)引⽤传递问题
⽰例:(performance) Function parameter 'f' should be passed by reference.
解决办法:在声明function时,能⽤引⽤传递的尽量使⽤引⽤传递,尽量避免值传递
(6)const参数问题
⽰例:(performance) Function parameter 's' should be passed by const reference. [passedByValue]解决办法:形参s前加上const,在函数中未被修改的变量,尽量声明为const
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论