Ubuntu使用splint查找C代码的BUG

2023-11-12

1 安装splint

sudo apt-get install splint

 2 测试代码main.c如下

#include <stdio.h>

// 全局变量,所有函数公用的
int global = 0;

// 求长方形的面积
int rect(int a, int b)
{
    static int count = 0;
    count++;
    global++;
    int s = a * b;
    return s;
}

// 求正方形的面积
int quadrate(int a)
{
    static int count = 0;
    count++;
    global++;
    int s = rect(a, a);
    return s;
}

int main()
{
    int a = 3;
    int b = 4;
    int *pa = &a;
    int *pb = &b;
    int *pglobal = &global;
    int (*pquadrate)(int a) = &quadrate; // 定义了函数指针
    int s = (*pquadrate)(a);             // int s=quadrate(a);
    printf("%d\n", s);
    return 0;
}

3 使用splint检查源代码main.c

splint main.c

 4 结果截图如下

5 检测结果

  • 变量声明了但是没有使用,删掉即可
  • 变量与函数是exported(输出,出口) ,但是外面没有用, 加 static关键字即可

6 resolved解决了

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu使用splint查找C代码的BUG 的相关文章

随机推荐

  • 输出数组中最大、小值和下标

    详细看代码 package exp 4 public class Array01 public static void main String args int arrs 1 2 2 12 7 5 声明数组并赋值 int max arrs
  • Python实现目录文件扫描功能

    日常程序编写中常常遇到需要获取目录下文件的功能 对该功能做个简单整理 供大家参考 实现遍历目录文件最常用的方法是os listdir 还有一种os walk方法 一 os listdir方法 源码中对该方法的描述 Return a list
  • 史上最详细黑盒测试用例方法总结(等价类、边界值、因果图等)

    黑盒测试用例设计方法 一 等价类 等价类划分法原理 1 把程序的输入域划分成若干部分 然后从每个部分中选取少数代表性数据作为测试用例 2 每一类的代表性数据在测试中的作用等价于这一类中的其他值 如果某一类中的一个例子发现了错误 这一等价类中
  • Flutter FutureBuilder

    FutureBuilder 是 Flutter 中的一个小部件 用于根据 Future 的结果构建用户界面 它接受一个 Future 对象和一个构建函数作为参数 FutureBuilder 将监听 Future 对象的变化 并相应地更新用户
  • useCallback 作用,useMemo ,memo作用 浅显理解

    项目中看到别人代码基本上每个函数都写了useCallback 于是去查了查到底有什么作用 快看睡着了还是没太明白 直接同事请教了一下 大概浅显的理解一点 useCallback 简单来说就是返回一个函数 只有在依赖项发生变化的时候才会更新
  • Vue 点击导航栏滑动到指定位置

    效果图 assignBlock gif 方法1
  • 前后端分离接口

    前后端分离接口的意义 目前现有前后端开发模式 后端为主的MVC时代 如下图所示 代码可维护性得到明显好转 MVC 是个非常好的协作模式 从架构层面让开发者懂得什么代码应该写在什么地方 为了让 View 层更简单干脆 还可以选择 Veloci
  • 现代密码学期末总结

    文章目录 写在前面 1 引言 知识点 习题 2 流密码 知识点 习题 3 分组密码 知识点 习题 4 公钥密码 知识点 习题 5 数字签名 知识点 习题 6 哈希函数 知识点 7 认证技术 知识点 8 密钥分配与密钥管理 知识点 习题 9
  • 大数据:对大数据的理解

    学了这么久大数据 学了好多主流大数据框架 从来没有主观意义上去深度地思考过大数据 现在对于大数据我讲讲自己的想法 1 大数据的产生 为什么会有大数据 随着互联网的发展 现在大部分日常生活都通过网络变得十分便捷 吃穿住行等等的日常生活都离不开
  • 【三十九、MySql】进阶篇--存储过程--循环(while、repeat、loop)

    1 while循环 语法 先判定循环是有条件的循环控制语句 满足条件后 再执行循环体中的sql语句 while 条件 do sql语句 end while 练习 传入一个参数n 计算1 2 3 n的值 create procedure p5
  • 卸载centos自带jdk&安装指定版本jdk

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 删除jdk 1 查看java安装情况 2 查看 3 卸载 4 rpm总结 5 安装 1 查看java安装情况 java version 2 查看 rpm qa grep jd
  • js实现贪吃蛇小游戏

  • 2023年电子设计大赛E题——省一设计报告

    2023 年全国大学生电子设计竞赛 运动目标控制与自动追踪系统 E 题 本科组 设计报告 目录 一 系统方案 4 一 主控模块的论证与选择 4 1 方案一 4 2 方案二 5 3 总结 5 二 巡线模块的论证与选择 5 1 方案一 5 2
  • 大数据工程师面试经验

    全中国的IT公司只想去阿里 因为阿里真的是中国程序员的朝圣地 进去真的能学很多 最终经历了5轮面试 顺利拿到了offer 这里和大家分享一下我的面试经验 一面过程 首先是一次不记名面试 这里我也真的很感谢这场不记名面试了 如果没有这场不记名
  • C++类的拷贝(复制)构造函数深入理解

    目录 一 拷贝构造函数的基本了解和使用 二 拷贝构造函数的一些注意事项 三 拷贝构造函数的调用时机 使用一个对象 直接构造 显式构造 或 初始化 隐式构造 另一个同类对象 关于拷贝构造函数与赋值函数的区别与联系 作为函数的形式参数时 作为函
  • 路由器网口1一直闪烁正常吗_路由器灯怎么闪才正常

    在我们日常生活当中 很多人家里都会安装各种各样的路由器 有的人家中安装的路由器是穿墙路由器 无论是安装的哪种路由器都有可能出现一些故障 今天小编就来跟大家说一说路由器灯怎么闪才正常 希望可以给大家带来帮助 感兴趣的朋友们可以跟随小编一起来了
  • vue3+ts动态写后台管理系统左边的菜单栏

    1 在路由router文件里面写路由元信息传递左侧显示的路由 以及路由的名字 const routes Array
  • Pandas知识点-索引和切片操作

    Pandas知识点 索引和切片操作 索引和切片操作是最基本最常用的数据处理操作 Pandas中的索引和切片操作基于Python的语言特性 支持类似于numpy中的操作 也可以使用行标签 列标签以及行标签与列标签的组合来进行索引和切片操作 本
  • Golang架构直通车——理解defer

    文章目录 defer应用 defer触发时机 defer执行顺序 预计算参数 defer实现原理 defer应用 Go 语言的 defer会在当前函数或者方法返回之前执行传入的函数 它会经常被用于关闭文件描述符 关闭数据库连接以及解锁资源
  • Ubuntu使用splint查找C代码的BUG

    1 安装splint sudo apt get install splint 2 测试代码main c如下 include