MISRA C 2012 阅读笔记

news2024/11/28 10:51:38

背景

        C语言诞生至今已有50年,因其语言简洁,语法丰富,可移植性高,和执行效率高等优点,至今仍保持着强大的生命力,在各个行业发挥着作用。

        然而C语言的一些优点有时候也是一把双刃剑,在使用者使用不当时反而变成了缺点,主要体现在以下三个方面。首先是一些标准在不同的目标处理器下具有不同的实现和表现,导致可移植性相关的问题;其次是一些程序员容易滥用一些语法,加上C语言高度的灵活性,导致写出不符合预期的代码,或者不容易让阅读者理解的代码;最后则是为了提高运行时的效率,C语言中少有运行时的一些错误检查,这些可能发生的错误需要编程人员自己去规避或解决。

MISRA C

        因此C语言编程不难,难在写出清晰易懂、结果符合预期、可移植性高的C代码,尤其在一些对安全性要求很高的行业(如汽车电子等)。为了规范相关从业人员的编程,汽车工业软件可靠性协会(MISRA,Motor Industry)制定了一套针对C语言的编码准则,称为MISRA C。这套标准早期用于提升汽车制造业中嵌入式代码的安全线、可靠性,现在已发展成为编写安全相关C代码的最佳时间,在汽车电子、轨道交通、医疗器械、航空航天等各个领域都被广泛使用。

发展

        MISRA 先后发布了三版编码准则,分别是 MISRA C:1998、MISRA C:2004 和 MISRA C:2012。MISRA C:2012(第三版,第一次修订版)发布于 2019 年 2 月,整合了此前发布的 AMD1(修订案 1,MISRA C:2012 的附加安全准则)和 TC1(技术更正 1) 的内容,包含 173 条规则。2020 年 MISRA 发布了修订案 2 (ISO/IEC 9899:2011 核心功能更新),增加了 2 条新的规则。

MISRA C:2012

        MISRA C:2012制定了一套C语言编程规范,目的是最大化消除或减少编程错误。其中包含175条编码准则(guideline),分为指令(directive)和规则(rule)。

        这175条编码准则可以从使用要求、可判定性、作用域三个方面继续划分,如下表所示。

使用要求

Mandorary:强制使用,不得违反

Required:要求性,尽量满足

Advisory:建议性

可判定性

是否可通过阅读代码判定满足要求与否

作用域

单一翻译单元:可通过独立检查每个翻译单元来检测项目内所有的违反对应准则的行为

系统:需要分析所有的源码来判定是否违反相关准则

        从代码审核的角度,MISRA C:2012提供了可操作的、量化的评判标准,当然人工审核巨量代码的效率和效果并不理想,也不实际。市面上也有相关的静态分析工具进行代码的自动化检测,支持如MISRA C以及其他的编程规范,进行代码的自动化检测。

        从编程人员的角度来说,阅读MISRA C的相关编程规范还是很有裨益的,因为它确实从各个模块具体地提出了多种编程规范/建议,使得编程人员能够更容易写出符合预期的、清晰易懂的C代码。

        不过由于手册中假定的工作平台为嵌入式,考虑到硬件配置和运行效率,一些标准在我们看来有写过于严苛。譬如其中一条准则为不允许使用malloc动态分配内存,其潜台词为在嵌入式中为了严格控制内存的使用,一般会在运行前将相关内存事先分配好,或者使用内存池技术进行一整块内存的内部分配、回收管理,以避免内存泄漏或者内存不足导致的内存分配失败问题。

知识点学习

C语言隐式声明 https://www.cnblogs.com/clnchanpin/p/7189554.html

C语言中的volatile 【嵌入式】C语言中volatile关键字_51CTO博客_java volatile关键字

C语言中的字符串结束符 c语言·字符串结束标志 - 知乎

为何不推荐使用goto 为什么说 goto 是一种不好的用法? - 知乎

C语言中的转义字符 C语言——转义字符_c语言转义字符-CSDN博客

函数指针 函数指针的使用_函数指针调用-CSDN博客

不完整类型 百度百科-验证

宏定义中#和##的用法 C语言宏中“#”和“##”的用法_c语言##-CSDN博客

const volatile同时使用 13. 一个参数可以既是const又是volatile吗_const和volatile同时使用_不会编程喵的博客-CSDN博客

参考

什么是 MISRA C:2012 - 知乎

编程规范 之 MISRA C/C++ - 知乎

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

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

相关文章

Acwing.886 求组合数Ⅱ

题目 给定n组询问&#xff0c;每组询问给定两个整数a&#xff0c; b&#xff0c;请你输出 的值。 输入格式 第一行包含整数n。 接下来n行&#xff0c;每行包含—组a和b。 输出格式 共n行&#xff0c;每行输出—个询问的解。 数据范围 1<n≤10000, 1 <b<a≤105…

Acwing.889 满足条件的01序列

题目 给定n个0和n个1&#xff0c;它们将按照某种顺序排成长度为2n的序列&#xff0c;求它们能排列成的所有序列中&#xff0c;能够满足任意前缀序列中0的个数都不少于1的个数的序列有多少个。 输出的答案对109&#xff0b;7取模。 输入格式 共一行&#xff0c;包含整数n。 …

【python】python虚拟环境--20231008

https://blog.csdn.net/m0_69023493/article/details/129158656 安装好python和pip 略 新建python虚拟空间 安装virtualenv pip install virtualenv -i https://pypi.tuna.tsinghua.edu.cn/simple安装virtualenvwrapper-win&#xff08;可选&#xff09; pip install vir…

软件测试/测试开发丨接口测试学习笔记-常见的接口协议

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/27726 一、网络模型 二、常见接口协议 RPC协议 RPC(remote procedure call)以本地代码调用的方式实现远程执行主要用于公司内部的服务调用 优点 传输效…

3分钟轻松实现网关网口连接罗克韦尔AB CompactLogix系列PLC

目录 EG网关网口连接罗克韦尔AB CompactLogix系列PLC 一. 准备工作 1.1 在对接前我们需准备如下物品 1.2 EG20网关准备工作 1.3 PLC准备工作 二. EMCP平台设置 2.1 新增EG设备 2.2 远程配置网关 2.3 网关绑定 2.4 通讯参数设置 2.5 创建设备驱动 2.5.1 添加变量 2.…

springcloud之项目实战搭建单体

写在前面 在上篇文章 中我们介绍了项目的整体内容以及架构&#xff0c;本文就开始实现一个单体的版本&#xff0c;在之后的文章中&#xff0c;在使用springcloud相关组件将这个单体的版本一步步的拆分为微服务的版本&#xff0c;在开始之前再贴下组件图&#xff1a; 本文我们分…

win11 vscode配置c/c++,使用mingw编译器

文章目录 第一步&#xff1a;装好vscode第二步&#xff1a;下载 mingw创建一个文件夹作为C或者C的项目文件夹&#xff0c;用vscode打开 第一步&#xff1a;装好vscode 之前使用python时装过 第二步&#xff1a;下载 mingw 官网 3.从这个界面一直往下滑 找到&#xff1a; 下…

是真的吗?Nuture子刊告诉你这么多年的微生物组经验都是错的?!

发表期刊&#xff1a;Nature Microbiology 发表时间&#xff1a;2023 影响因子&#xff1a;28.3 DOI: 10.1038/s41564-023-01426-7 在过去的二十年里&#xff0c;人们对人类微生物组研究的兴趣呈指数级增长&#xff0c;同时伴随而来的一系列相关研究的文献发表数目也是逐年递…

通过cri-o部署k8s集群环境

目录 一.基础环境配置&#xff08;每个节点都做&#xff09; 1.hosts解析 2.防火墙和selinux 3.安装基本软件并配置时间同步 4.禁用swap分区 5.更改内核参数 6.配置ipvs 7.k8s下载 &#xff08;1&#xff09;配置镜像下载相关软件 &#xff08;2&#xff09;配置kube…

B站数据分析,UP主粉丝画像如何看?

随着互联网的发展&#xff0c;在大数据时代的今天&#xff0c;越来越多的企业用它们来指导精准营销&#xff0c;数据资源成为各大公司竞相追逐的香饽饽&#xff0c;而对于短视频广告投放来说&#xff0c;了解账号的粉丝人群画像&#xff0c;就可以知道他们的喜好厌恶&#xff0…

GitHub相应太慢

后期使用到github下载源码&#xff0c;会发现响应太慢&#xff0c;本篇文章解决你的问题 获取域名对应的ip 访问链接&#xff1a;https://raw.hellogithub.com/hosts&#xff08;ps&#xff1a;这链接定时更新&#xff09;&#xff0c;获取对应的host配置。 如果需要工具自动…

专注域控制器深挖护城河,知行科技逐渐摆脱“大客户依赖”

两年营收剧增26倍有余&#xff0c;位列中国第二大第三方自动驾驶域控制器提供商&#xff0c;正是因为这基本面的扎实、护城河的深度&#xff0c;知行科技成长的进程才格外受人关注。在9月中上旬通过聆讯后&#xff0c;上市的一环也即将被补上。 而最近公布的信息里&#xff0c…

Arm64体系架构-MPIDR_EL1寄存器

背景 在Arm64多核处理器中, 各核间的关系可能不同. 比如1个16 core的cpu, 每4个core划分为1个cluster,共享L2 cache. 当我们需要从core 0将任务调度出来时,如果优先选择core 1~3, 那么性能明显时优于其他core的. 那么操作系统怎么知道core之间这样的拓扑信息呢? Arm提供了MPID…

敏捷项目管理解锁:2023年使用YouTrack的全面指南

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

20231008工作心得:sql

1.SQL语句里的if的嵌套使用 if(product A and brand_name B,C,if(product A and brand_name !B,D,product)) as product if&#xff08;A,B,C&#xff09;。SQL里if函数&#xff0c;如果条件A成立&#xff0c;就显示B的值&#xff0c;否则就显示C。 这个代码的意思的&#x…

RK3588实用技巧:查看显示器支持的分辨率,基于weston修改分辨率输出

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/133685938 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

数据结构面试常问问题--保研及考研复试

前言&#xff1a; Hello大家好&#xff0c;我是Dream。今年保研上岸山东大学人工智能专业 &#xff08;经验贴&#xff09;&#xff0c;现在将我自己的专业课备考知识点整理出来&#xff0c;分享给大家&#xff0c;希望可以帮助到大家&#xff01;这是重点知识总结&#xff0c;…

mfoc-hardnested项目属性

常规 预处理器 NDEBUG _CONSOLE NOGDI _AMD64_ _CRT_SECURE_NO_WARNINGS CONFFILES DRIVER_ACR122S_ENABLED DRIVER_ACR122_USB_ENABLED DRIVER_ARYGON_ENABLED DRIVER_PN532_UART_ENABLED DRIVER_PN53X_USB_ENABLED ENVVARS HAVE_CONFIG_H LOG u_int16_tuint16_t u_int8_tuin…

解决Playwright无法登录Google账号的问题

文章目录 问题描述解决问题免费登录生成代码问题描述 当使用playwright需要登入google帐号的时候,有可能会出现下面的情况:无法登录,提示浏览器不安全(因为我们是脚本使用) 【Python自学笔记】微软自动化测试工具playwright,微软版selenium解决问题 解决上面这个无法登入…

竞赛 深度学习 python opencv 动物识别与检测

文章目录 0 前言1 深度学习实现动物识别与检测2 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络 3 YOLOV53.1 网络架构图3.2 输入端3.3 基准网络3.4 Neck网络3.5 Head输出层 4 数据集准备4.1 数据标注简介4.2 数据保存…