热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C++静态代码分析

本文主要介绍关于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

基于dockercppcheck

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++静态代码检测。

image-20220727215654381

可直接运行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

这里我们将其加入到vscodetasks.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版权协议。


推荐阅读
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • c语言\n不换行,c语言printf不换行
    本文目录一览:1、C语言不换行输入2、c语言的 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 本文介绍了GTK+中的GObject对象系统,该系统是基于GLib和C语言完成的面向对象的框架,提供了灵活、可扩展且易于映射到其他语言的特性。其中最重要的是GType,它是GLib运行时类型认证和管理系统的基础,通过注册和管理基本数据类型、用户定义对象和界面类型来实现对象的继承。文章详细解释了GObject系统中对象的三个部分:唯一的ID标识、类结构和实例结构。 ... [详细]
  • 使用C++编写程序实现增加或删除桌面的右键列表项
    本文介绍了使用C++编写程序实现增加或删除桌面的右键列表项的方法。首先通过操作注册表来实现增加或删除右键列表项的目的,然后使用管理注册表的函数来编写程序。文章详细介绍了使用的五种函数:RegCreateKey、RegSetValueEx、RegOpenKeyEx、RegDeleteKey和RegCloseKey,并给出了增加一项的函数写法。通过本文的方法,可以方便地自定义桌面的右键列表项。 ... [详细]
  • [echarts] 同指标对比柱状图相关的知识介绍及应用示例
    本文由编程笔记小编为大家整理,主要介绍了echarts同指标对比柱状图相关的知识,包括对比课程通过率最高的8个课程和最低的8个课程以及全校的平均通过率。文章提供了一个应用示例,展示了如何使用echarts制作同指标对比柱状图,并对代码进行了详细解释和说明。该示例可以帮助读者更好地理解和应用echarts。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • Gitlab接入公司内部单点登录的安装和配置教程
    本文介绍了如何将公司内部的Gitlab系统接入单点登录服务,并提供了安装和配置的详细教程。通过使用oauth2协议,将原有的各子系统的独立登录统一迁移至单点登录。文章包括Gitlab的安装环境、版本号、编辑配置文件的步骤,并解决了在迁移过程中可能遇到的问题。 ... [详细]
  • 微信官方授权及获取OpenId的方法,服务器通过SpringBoot实现
    主要步骤:前端获取到code(wx.login),传入服务器服务器通过参数AppID和AppSecret访问官方接口,获取到OpenId ... [详细]
  • 本文介绍了NetCore WebAPI开发的探索过程,包括新建项目、运行接口获取数据、跨平台部署等。同时还提供了客户端访问代码示例,包括Post函数、服务器post地址、api参数等。详细讲解了部署模式选择、框架依赖和独立部署的区别,以及在Windows和Linux平台上的部署方法。 ... [详细]
author-avatar
我就是老笨2013
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有