作者:我就是老笨2013 | 来源:互联网 | 2023-10-09 21:33
本文主要介绍关于c++的知识点,对【C++静态代码分析】和【c语言程序代码固定模板】有兴趣的朋友可以看下由【首飞爱玩机器人】投稿的技术文章,希望该技术和经验能帮到你解决你所遇的CC++相关技术问题。
本文主要介绍关于c++的知识点,对【C++静态代码分析】和【c语言程序代码固定模板】有兴趣的朋友可以看下由【首飞爱玩机器人】投稿的技术文章,希望该技术和经验能帮到你解决你所遇的C/C++相关技术问题。
c语言程序代码固定模板
这里记录一下使用cppcheck
进行C++
代码静态检测的方法和步骤。
本机安装cppcheck
sudo apt-get update && sudo apt-get install cppcheck
使用cppcheck
来检查代码
新建一个目录,并在目录中加入如下内容的cpp
文件,用于测试静态代码分析工具。
测试代码
#include
using namespace std; int test_fun() { int a; return a; } int main(int argc, char* argv[]) { int num = argc - 1; int * a = nullptr; // intentional mistake *a = 9; if (num = 0) { cout <<"No arguments provided\n"; } else if (num == 0) { // intentional mistake cout <<"1 argument provided\n"; } else if (num == 2) { cout <<"2 arguments provided\n"; } else { cout <
使用cppcheck
检测效果如下:
➜ test_git git:(master) ✗ cppcheck ./src
Checking src/main.cpp ...
src/main.cpp:8:2: error: Null pointer dereference: a [nullPointer]
*a = 9;
^
src/main.cpp:7:11: note: Assignment 'a=nullptr', assigned value is 0
int * a = nullptr;
^
src/main.cpp:8:2: note: Null pointer dereference
*a = 9;
^
➜ test_git git:(master) ✗ ament_cppcheck ./src
[src/main.cpp:8]: (error: nullPointer) Null pointer dereference: a
1 errors
基于docker
的cppcheck
docker pull neszt/cppcheck-docker
docker run -t -v $(pwd):/src neszt/cppcheck-docker
在vscode
中进行静态代码检测
在安装了ROS2
后,可使用下面的命令安装ament linters
。
sudo apt-get install ros-$ROS_DISTRO-ament-lint
运行完后,系统目录/opt/ros/galactic/bin
下就会被安装下图所示的文件。
其中的ament_cppcheck
即可用于C++
静态代码检测。
可直接运行ament_cppcheck
命令。效果与之前的cppcheck
类似。
➜ test_git git:(master) ✗ ament_cppcheck src/ git:(master|✚1…3
[src/main.cpp:19]: (error: nullPointer) Null pointer dereference: a
[src/main.cpp:8]: (error: uninitvar) Uninitialized variable: a
2 errors
这里我们将其加入到vscode
的tasks.json
文件中。这样就可以直接在vscode
中直接运行静态代码检测任务了。
{
"label": "cppcheck",
"detail": "Run static code checker cppcheck.",
"type": "shell",
"command": "ament_cppcheck src/",
"presentation": {
"panel": "dedicated",
"reveal": "silent",
"clear": true
},
"problemMatcher": [
{
"owner": "cppcheck",
"source": "cppcheck",
"pattern": [
{
"regexp": "^\\[(.+):(\\d+)\\]:\\s+(.+)$",
"file": 1,
"line": 2,
"message": 3
}
]
}
]
},
按Shift+Ctrl+P
打开命令面板,输入task
并回车即可看到任务列表。
完整的tasks.json
文件还包含代码格式化,代码格式检测以及其他有用的任务。文件过长,可到下面的链接中查看。
https://github.com/shoufei403/ros2_galactic_ws/blob/master/.vscode/tasks.json
觉得有用就点赞吧!
我是首飞,一个帮大家填坑的机器人开发攻城狮。
另外在公众号《首飞》内回复“机器人”获取精心推荐的C/C++,Python,Docker,Qt,ROS1/2等机器人行业常用技术资料。
本文《C++静态代码分析》版权归首飞爱玩机器人所有,引用C++静态代码分析需遵循CC 4.0 BY-SA版权协议。