【回眸】QAC软件指南——错误分析篇(完整版)

前言

近期需要再次测一下代码,相比以前测试更有经验,也做了比较多的记录,正好将经验通过博客保留下来,为以后可能的QAC测试做准备。

安装导入分析代码

这部分在上一篇中已经详细介绍,具体请见,如有疑问可以留言。

【回眸】QAC软件指南——萌新使用篇icon-default.png?t=N7T8http://t.csdnimg.cn/S6Zpe

前置经验 

以前的导入头文件我选择提取全部头文件在一个文件夹里然后导入单个文件夹完成所有头文件的导入,但近期热心同事拿出shell脚本自动化添加头文件,从此找不到头文件的问题再也没出现,不仅如此,400多个头文件的路径在2分钟内就被水灵灵地加上了,实属科技改变生活。

QAC报错分析

根据同系列前一篇文章分析代码后,完成代码分析之后就进入了分析纠错环节
下面记录本次分析代码遇到的问题

app.c

1. 实在找不到原因,只好 disable
2.不允许多行注释
3.在#include "..."指令中使用的文件名不符合ISO:C90标准最严格的可移植性要求。为了达到这种严格的一致性,包含文件名必须限制在最多6个字母字符、一个句点(.)和一个字母字符。这些字符应该全部大写或全部小写。
4.消息0857指出了一种情况,即在翻译单元内定义的宏数量超过了ISO:C90标准的最低要求1024个。消息0380指出了违反相应ISO:C99限制的代码,即4095个宏。 

 bootchain_handler.c

1.在#include "..."指令中使用的文件名不符合ISO:C90标准最严格的可移植性要求。为了达到这种严格的一致性,包含文件名必须限制在最多6个字母字符、一个句点(.)和一个字母字符。这些字符应该全部大写或全部小写。
2.消息0857指出了一种情况,即在翻译单元内定义的宏数量超过了ISO:C90标准的最低要求1024个。消息0380指出了违反相应ISO:C99限制的代码,即4095个宏。

chagen.c

1.在注释里有特殊字符@,不符合规则.
2.不允许多行注释
3.不允许在头文件路径上有 / 字符
4.在#include "..."指令中使用的文件名不符合ISO:C90标准最严格的可移植性要求。为了达到这种严格的一致性,包含文件名必须限制在最多6个字母字符、一个句点(.)和一个字母字符。这些字符应该全部大写或全部小写。
5.未定义LWIP_SOCKET 宏,经过查找,发现在lwipopts.h文件里#define LWIP_SOCKET 0 /**< \brief default is 1 */,但是在chagen.c 文件里引用的opt.h包含lwipopts.h,QAC未识别出,是否需要手动添加LWIP_SOCKET = 0 ?
6.代码中使用int,违反了M3CM的"Avoid using basic numerical types directly"规则
7.#include "chargen.h"和"string.h"是多余的
8.图4的函数没有传入参数及返回值也没有外部连接,是多余的

 

 

 ethernet.c

1.不允许多行注释
2.在#include "..."指令中使用的文件名不符合ISO:C90标准最严格的可移植性要求。为了达到这种严格的一致性,包含文件名必须限制在最多6个字母字符、一个句点(.)和一个字母字符。这些字符应该全部大写或全部小写。

gnss_boot.c

1.在#include "..."指令中使用的文件名不符合ISO:C90标准最严格的可移植性要求。为了达到这种严格的一致性,包含文件名必须限制在最多6个字母字符、一个句点(.)和一个字母字符。这些字符应该全部大写或全部小写。 

 

gnss_boot_uart.c

1.在#include "..."指令中使用的文件名不符合ISO:C90标准最严格的可移植性要求。为了达到这种严格的一致性,包含文件名必须限制在最多6个字母字符、一个句点(.)和一个字母字符。这些字符应该全部大写或全部小写。
2.#include "stdio.h" 在#include "jupiter_debug.h"已经被包含.
3.#include "Uart.h"在#include "gnss_boot_uart.h"已经被包含
4.未命名的'struct'和'union'类型在迁移到C++时可能会导致可移植性问题。
5.大括号的使用不符合“exdented”风格
6.缩进 tab和空格混用导致进与文件中之前的缩进不一致错误
7.Use of basic type 'unsigned int'.避免使用基本类型“unsigned int”。
8.Use of basic type 'unsigned char'.避免使用基本类型“unsigned char”。
9.ISO:C90标准的最低要求(前6个字符内不唯一)内不唯一的情况,GNSS_Boot_UartStreamSize   GNSS_Boot_UartTxInd等 不符合该条规定
10.匹配的大括号出现在同一行 - 建议使用正确的缩进。
11.文件范围静态变量“uart_rx_boot_buf_single”仅在一个函数中被访问,如果一个文件范围的静态变量仅在一个函数中被访问,那么它应该被声明为块范围的静态变量.
12.参数“size”和"status","count","ErrorId"从未被修改,因此可以用“const”限定符声明。
13.不允许使用显式或隐式的指针转换.
14.'memset' returns a value which is not being used.'memset'函数的返回值是无用的.
15.一个“unsigned short”类型的非恒定表达式正在被传递给更宽的无符号类型的函数参数,'unsigned int'。
16.Pointed to object has smaller size than the size_t argument存在数组越界的危险
17.有符号类型和无符号类型进行算术运算时会发生错误  if(Receivecnt < GNSS_Boot_GetUartStreamSize()-1)
18.timeoutCnt 是static uint16类型,但是却和int类型进行运算比较
19.图2的循环永远为真
20.图2 % 两边的类型不一样,会产生一个"signed int"
21.图2  == 两边的类型不一样,都将被提升为“signed int”以进行比较
22.图3 的flash_identifier 被定义为const 类型,过显式的类型转换去除了const限定符,因为这可能导致未定义行为,特别是如果试图通过非const指针修改原本应该是常量的数据。这违反了MISRA C标准中的规则11.4(强制),该规则要求在使用转换时必须确保转换不会去除任何类型限定符.
23.图4的!= 两边类型不一样,都将被提升为“signed int”以进行比较
24.图5的CombBaudData,baudrate_changed,host_ready,flash_ready被定义为const 类型,过显式的类型转换去除了const限定符,因为这可能导致未定义行为,特别是如果试图通过非const指针修改原本应该是常量的数据。这违反了MISRA C标准中的规则11.4(强制),该规则要求在使用转换时必须确保转换不会去除任何类型限定符.
25.图6的3个位运算的结果没有被显式地转换为它们的本质类型,可能存在未定义行为。
26.有非常多的 The operands of this relational operator are of different 'essential signedness' but will both be promoted to 'signed int' for comparison.问题
 

 

 

 

 

 

 

 

 持续更新中

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/411724.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

百元蓝牙耳机什么牌子的好?四大宝藏机型真实推荐,快速收藏!

作为一位蓝牙耳机爱好者&#xff0c;无论是上班、娱乐、学习我都离不开蓝牙耳机。通勤时候能听听音乐&#xff0c;是最好的享受&#xff0c;可以让我更加放松&#xff0c;尽情享受音乐带来的乐趣。但市面上的大多数蓝牙耳机都是货不对板的&#xff0c;不是音质一般、就是续航时…

谷歌发布 3 款 Gemini 新模型;字节开源 FLUX Dev Hyper SD Lora,8 步生图丨 RTE 开发者日报

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

Seata执行原理分析-AT、XA、TCC、SAGA比较

分布式事务简介 1.1 本地事务 大多数场景下&#xff0c;我们的应用都只需要操作单一的数据库&#xff0c;这种情况下的事务称之为本地事务(Local Transaction)。本地事务的ACID特性是数据库直接提供支持。本地事务应用架构如下所示&#xff1a; 在JDBC编程中&#xff0c;我们…

priority_queue模拟

一、什么是priority_queue? priority_queue是C标准库中的一个容器适配器&#xff0c;用于实现优先队列&#xff08;priority queue&#xff09;的数据结构。优先队列是一种特殊的队列&#xff0c;其中的元素按照一定的优先级进行排序&#xff0c;每次取出的元素都是优先级最高…

从零开始掌握Vue实例

从零开始掌握Vue实例&#xff1a;深入理解数据绑定与生命周期的核心秘诀 引言 简要介绍主题&#xff1a; 在学习Vue.js的过程中&#xff0c;Vue实例是最基础也是最关键的部分。Vue实例是Vue应用的核心&#xff0c;它是数据、DOM元素和Vue组件之间的桥梁。掌握Vue实例的使用对于…

文件上传面板中限制需要的文件格式,并且隐藏“所有文件”选项

直接说需求&#xff1a;需要实现在文件上传面板中限制需要的文件格式&#xff0c;并且不想展示“所有文件”这个选项&#xff0c;应该怎么做嘞&#xff1f;效果如下图&#xff1a; 这里用到了 window.showOpenFilePicker 方法实现&#xff0c;首先定义接受的格式及限制&#xf…

格行“信号增强技术”引领行业创新,格行随身WiFi带你感受不一样的速度与激情,行业第一的随身WiFi并非浪得虚名!

近年来&#xff0c;随着市场保有量的不断提升与相关技术的不断扩展&#xff0c;我国随身WiFi市场已经到了发展质量更高的“2.0”阶段&#xff0c;消费者对随身WiFi的需求变得多元且“高级”。与之对应的供给端&#xff0c;品牌之间的竞争也从未停止&#xff0c;有的品牌选择卷价…

如何使用ssm实现实验室仪器设备管理系统

TOC ssm354实验室仪器设备管理系统jsp 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;规范化…

快来尝尝,食家巷荞面甜甜圈超赞

当荞面与甜甜圈相遇&#xff0c;便诞生了食家巷荞面甜甜圈&#xff0c;一种独具特色的美食体验。 食家巷荞面甜甜圈&#xff0c;外形圆润可爱&#xff0c;色泽金黄诱人。那精致的环状造型&#xff0c;仿佛是一个小小的魔法圈&#xff0c;散发着迷人的魅力。 与传统甜甜圈…

计算机网络面试真题总结(七)

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 什么是对称加密、非对称加密&#xff1f; 对称加密是一种常用的加…

探索AI智能问答:改变未来交流的新动力

人工智能(AI)是当今科技领域中最具潜力和影响力的技术之一&#xff0c;AI智能问答系统更是这一领域中的一颗璀璨明珠。随着大数据和机器学习的发展&#xff0c;AI智能问答系统已经不仅仅是科幻小说中的幻想&#xff0c;而是正逐步融入我们的日常生活&#xff0c;从客户服务到教…

生成式AI扩散模型-Diffusion Model【李宏毅2023】概念讲解、原理剖析笔记

目录 一、Diffusion的基本概念和运作方法 1.Diffusion Model是如何运作的&#xff1f; 2.Denoise模块内部正在做的事情 如何训练Noise predictor&#xff1f; 1&#xff09;Forward Process (Diffusion Process) 2&#xff09;noise predictor 3.Text-to-Image 4.两个A…

入门Java第一步—>IDEA的下载与安装与JDK的环境配置(day01)

1.JDK的下载与安装 jdk的安装链接分为不同操作系统如下,点击链接跳转下载页面&#xff1a; windows操作系统JDK下载链接(按住键盘ctrl键单击链接即可)&#xff1a; 链接7天有效&#xff0c;有需要的评论区找我哈 通过网盘分享的文件&#xff1a;jdk-8u271-windows-x64.exe 链…

人工智能如何将人机交互提升到新水平

随着人工智能模型在语音识别和合成、文本处理和多模态性方面的卓越表现&#xff0c;终极语音用户界面可能很快就会无处不在。欢迎来到雲闪世界。 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 那是一个典型的星期五下午&#xff0c;我们刚刚结束了一个…

如何用wireshark分析找出url接口和param参数???

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

Linux 内核源码分析---IPv6 数据包

IPv6是英文“Internet Protocol Version 6”&#xff08;互联网协议第6版&#xff09;的缩写&#xff0c;是互联网工程任务组&#xff08;IETF&#xff09;设计的用于替代IPv4的下一代IP协议&#xff0c;其地址数量号称可以为全世界的每一粒沙子编上一个地址。 由于IPv4最大的…

Tapd敏捷开发平台的使用心得

Tapd敏捷开发平台的使用心得 一、Tapd 简介 TAPD(Tencent Agile Product Development),腾讯敏捷产品研发平台行业领先的敏捷协作方案,贯穿敏捷产品研发生命周期的一站式服务,了解敏捷如下图 二、几个核心模块概念 需求迭代缺陷故事墙前期项目需求的管理,可以按类别建…

22AP10 SS524 平替 海思HI3521DV200 可提供开发资料

22AP10 是针对多路高清/超高清&#xff08;1080p/4M/5M/4K&#xff09;DVR 产品应用开发的新一代专 业 SoC 芯片。22AP10 集成了 ARM Cortex-A7 四核处理器和性能强大的图像分析工具 推理引擎&#xff0c;支持多种智能算法应用。同时&#xff0c;22AP10 还集成了多路 MIPI …

【可兼容的】protobuf、streamlit、transformers、icetk、cpm_kernels版本号

搞大模型训练的工作不可避免地需要很多库&#xff0c;但是非常讨厌的事情是这些库动不动就不兼容。最近在做文本分类训练的时候又遇到了这个问题&#xff0c;为了避免后面再安装包的时候把我之前的环境破坏了&#xff0c;所以特地来记录一下&#xff1a;protobuf、streamlit、t…

排序算法见解(2)

1.快速排序 1.1基本思想&#xff1a; 快速排序是通过一趟排序将待排序的数据分割成独立的两部分&#xff0c;其中一部分的所有数据都比另一部分的所有数据都要小&#xff0c;然后再按此方法对这两部分数据分别进行快速排序&#xff0c;整个排序过程可以递归进行&#xff0c;以…