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

news2025/2/24 10:36:23

前言

近期需要再次测一下代码,相比以前测试更有经验,也做了比较多的记录,正好将经验通过博客保留下来,为以后可能的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.coloradmin.cn/o/2085480.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

netty编程之使用protostuff作为数据传输载体

写在前面 源码 。 本文看下使用protostuff作为数据传输的载体。 1&#xff1a;正戏 1.1&#xff1a;server server main&#xff1a; package com.dahuyou.netty.protostuff.server;import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; i…

这些持续高额派息的公司,都做对了什么?

2024年&#xff0c;资产荒已成共识&#xff0c;投资者梦寐以求寻找不怕火炼的“真金”。 受此影响&#xff0c;具有业绩高确定性和高股息的资产价值凸显。银河证券策略首席分析师杨超指出&#xff0c;当前&#xff0c;投资者对于现金回报的重视程度日益提升&#xff0c;促使上…

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

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

微软Power Platform使用Power Automate低代码创建API接口供外部调用获取数据

微软Power Platform使用Power Automate低代码创建API接口供外部调用获取数据 在系统的使用过程中&#xff0c;有很多的情况需要外部调用内部数据增删改查&#xff0c;这里提供一种简单的方式&#xff0c;无需编写代码即可上手操作。 首先创建一个流&#xff0c;触发器为当收到…

区块链入门

1.1 区块链技术的发展 随着 2008 年比特币(Bitcoin) 的发明,一个被称为区块链(Blockchain) 的新概念进入了人们的视野,这项新技术据信有可能彻底改变整个社会。 区块链有望对每个行业产生颠覆的影响,包括但不限于 IT、金融、政府、媒体、医疗、法律和艺术等。一个流派将区…

飞利浦开放式耳机怎么样?南卡、飞利浦、Cleer、倍思一周横评

​作为一名有着四年耳机测评经验的耳机深度用户&#xff0c;最近切实感觉到开放式耳机这个品类是真的火了&#xff0c;不过也可以理解&#xff0c;开放式耳机的佩戴舒适度不是普通入耳式耳机可比的&#xff0c;而且更加健康卫生&#xff0c;在户外使用能够方便接收环境音&#…

有了这工具,再也不用死记硬背Linux命令了

前言 传统的终端工具往往需要用户记住大量的Linux命令。每当遇到不熟悉的命令时&#xff0c;就得花时间去查阅文档或在网上搜索&#xff0c;而且查到很多内容跟问题并不相关&#xff0c;这无疑降低了工作效率。 传统终端工具的痛点 在传统的Linux终端工具中&#xff0c;用户…

【掌握未来科技脉搏!电路仿真软件:数字电路学习的秘密武器】

在日新月异的科技时代&#xff0c;数字电路作为信息技术的基础&#xff0c;其重要性不言而喻。从简单的逻辑门电路到复杂的微处理器设计&#xff0c;数字电路的学习不仅关乎理论知识&#xff0c;更在于实践操作的掌握。而今&#xff0c;借助电路仿真软件这一强大工具&#xff0…

MS1861 宏晶微 视频显示与控制器芯片 提供开发资料

MS1861是一颗集成了HD、LVDS和数字视频信号输入的芯片。输出端可以驱动MIPI(DSI-2)、LVDS、Mini-LVDS以及TTL类型的TFT-LCD液晶显示。支持输入视频信号的滤波、图像增强、锐化、对比度调节、视频缩放、裁剪、旋转、内部字符&#xff08;图形&#xff09;叠加、帧频变化等处理。…

chapter09-项目——(房屋出租系统)——day11

目录 362-房屋出租需求 363-房屋出租设计 364-房屋出租工具类 365-房屋出租House类 366-房屋出租主菜单 367-房屋出租列表 368-房屋出租添加 369-房屋出租删除 370-房屋出租退出 371-房屋出租查找 372-房屋查找修改 362-房屋出租需求 363-房屋出租设计 364-房屋出租工…

错误: 找不到或无法加载主类 App.class,Java文件是怎么编译的

App.java文件: 文件路径:D:\com\fdw\App.java 文件内容: package com.fdw; public class App {public static void main(String[] args) {System.out.println("apple");} } 注意: App.java 必须放在com\fdw目录下(包名要和目录一致),否则无法启动! 编译

vrrp协议,主备路由器的选举

当VRRP备份组中的所有备份路由器&#xff08;BACKUP&#xff09;具有相同的优先级时&#xff0c;选举新的主路由器&#xff08;MASTER&#xff09;的过程将基于以下规则&#xff1a; IP地址优先&#xff1a;如果备份路由器的优先级相同&#xff0c;那么具有最高IP地址的路由器…

肉类快速鉴别仪

肉类快速鉴别仪是一种用于快速检测肉类中是否含有其他动物物种混合的仪器。它的功能主要包括以下几个方面&#xff1a; 动物物种鉴别&#xff1a;肉类快速鉴别仪可以快速识别肉类样本中的动物物种&#xff0c;例如牛肉、猪肉、羊肉等。通过分析肉类样本中的DNA或蛋白质序列&…

整理了100个Python精选库,建议收藏!

Python为啥这么火&#xff0c;这么多人学&#xff0c;就是因为简单好学&#xff0c;功能强大&#xff0c;整个社区非常活跃&#xff0c;资料很多。而且这语言涉及了方方面面&#xff0c;比如自动化测试&#xff0c;运维&#xff0c;爬虫&#xff0c;数据分析&#xff0c;机器学…

LLVM ERROR: Symbol not found: __svml_cosf8_ha问题解决

问题 python项目运行的时候会报错 LLVM ERROR: Symbol not found: __svml_cosf8_ha 解决方法 LLVM ERROR: Symbol not found: __svml_cosf8_ha 通常与 Intel 的数学库 SVML&#xff08;Sparse Vector Math Library&#xff09;有关。 SVML 是 Intel 提供的一个用于提高浮点数…

Python开源项目周排行 2024年第14周

#2024年第14周2024年8月16日1cursor一款功能强大的开源编程助手&#xff0c;利用大型语言模型&#xff08;LLM&#xff09;技术&#xff0c;通过交互帮助开发者完成代码补全、函数级代码生成等任务。Cursor不仅理解代码库&#xff0c;还能从中提取最匹配的代码&#xff0c;并引…

每天学习一个基础算法之顺序查找

目录 前言&#xff1a; 1、对顺序查找概念的诠释 2、顺序查找的使用场景 3、顺序查找的实现代码 顺序查找主体&#xff08;以接口函数的形式&#xff09; 测试部分&#xff08;主函数调用&#xff09; 调试结果 前言&#xff1a; 查找也是一种经常使用的算法&#xff0c;即根据…

机器学习/数据分析--通俗语言带你入门随机森林,并用随机森林进行天气分类预测(Accuracy为0.92)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 前言 机器学习是深度学习和数据分析的基础&#xff0c;接下来将更新常见的机器学习算法及其案例注意&#xff1a;在打数学建模比赛中&#xff0c;机器学习用的…

心脑血管科曹启富医生:吃什么可以降低高血压

患者&#xff1a;曹医生&#xff0c;我家人有高血压&#xff0c;听说有些食物可以帮助降低血压&#xff0c;请问吃什么可以降低高血压呢&#xff1f; 曹医生说&#xff1a;您的问题非常实际&#xff0c;也是很多高血压患者和家属关心的问题。确实&#xff0c;通过合理的饮食调…

解决Springboot项目Maven下载依赖速度慢的问题

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…