MISRA C++:2023,您需要了解的下一个MISRA信息

news2024/11/25 18:52:23

MISRA C++:2023®是备受期待的MISRA C++标准的下一个版本,预计将于今年晚些时候发布。这个新版本将整合AUTOSAR C++ 14指南,并支持最新版本的C++。

MISRA®的C和C++编码指南不仅是汽车行业的最佳标准,也是使用嵌入式系统的任何行业的最佳标准。

为了帮助您更好地了解新版本,Perforce将启动系列博客文章,带您解读MISRA C++:2023,这些文章由Perforce的MISRA专家Frank van den Beuken博士撰写,他曾参与了公众审阅。Perforce中国授权合作伙伴——龙智也将一一翻译,并在微信公众号中发布,敬请期待!

MISRA C++ ®的背景

MISRA C++的当前版本发布于2008年。它为以ISO C++ 2003编写的安全相关软件的开发提供了专家指导。这套指南已经被广泛采用,并在许多安全关键项目中成为了强制遵循的准。然而,自那时以来,C++语言发生了相当大的变化,新的版本引入了新的语言功能,并且改变了现有的特性。

使用较新版本的C++语言开发的项目可能不符合MISRA C++:2008的所有规则,并且新特性可能不在其覆盖范围之内。为了给这些新版本提供指南,AUTOSAR 以 MISRA C++:2008为基础,结合其他标准的规则,为C++14制定了新的指南。MISRA C++工作组目前正在根据AUTOSAR指南对MISRA C++进行更新,以适用于C++17,但其中包括了MISRA已确立的安全相关C++开发的最佳实践。

人们对新的MISRA C++指南兴趣浓厚。然而,由于MISRA C++:2008已被许多项目采用,所以对于改用新的指南,人们也存在一些担忧。

MISRA C++:2023®系列文章预览

在本系列文章中,将探讨新标准的多个方面。

C++和MISRA C++的历史

首先,文章将概述C++编程语言的历史,从1979年Bjarne Stroustrup 在贝尔实验室提出概念,到1991年开始标准化,再到目前的C++20版本。

值得注意的是,C++20中添加的一些主要功能在之前就已经讨论过了。“模块(modules)”和“概念(concepts)”就是这种情况,它们都是新功能,为并发编程的标准化功能提供库实现(library implementations)和协程(coroutines)。直到现在,并发支持才成为指南的一部分。但在之前,这些功能已经在Simula编程语言中存在,与C语言的高效性能相结合,以提供程序组织和并发支持。

然而,必须指出,MISRA C++似乎将以C++17为基础。造成这种情况的原因可能是,编译器实现者需要时间来为所有语言特性提供支持,而且这些实现还需要经过认证才能用于安全关键项目。

随着时间的推移,已经有许多不同的C++编码标准被编写出来了。不仅是前文提到的AUTOSAR指南,还有许多其他流行的编码标准在使用中。在今年的《汽车软件开发状况报告》中,介绍了400位汽车开发专业人士对于汽车软件行业当前实践和新兴趋势的问题的回答。随着电动汽车和半自动驾驶汽车的持续发展,以及随之而来的软件组件的增加,研究结果继续表明,安全性与防范性同样重要,并且是人们关注的主要问题。遵守安全标准的要求越来越高,也反映了这一点。

该报告还显示,仍然是汽车行业最流行的编码标准,42%的受访者使用MISRA编码标准。鉴于MISRA的悠久历史及其在汽车行业的深厚根基,这就不足为奇了。AUTOSAR以36%的比例位居第三。C++核心指南标准令人惊讶地排在第二位,占比39%,尽管该标准与汽车行业没有明显的关系。它之所以受欢迎,可能是因为它涵盖了开发人员想要使用的最新C++语言特性。

您目前正在使用哪些编码标准?

图片

△《2023 年汽车软件开发状况报告》对于此问题的回应

C++编码标准的方方面面

由Bjarne Stroustrup和Herb Sutter发起的C++核心指南是一份不断改进的动态文件。由于该标准涵盖了最新的C++语言功能,所以也影响着AUTOSAR标准的制定。AUTOSAR包括了两个标准之间的比较,显示C++核心准则中有30%与AUTOSAR规则存在冲突。MISRA C++:2023涵盖了大部分AUTOSAR的问题,并且新的指南没有直接使用C++核心准则。

Perforce将提供一篇专门的文章,全方位比较这些C++编码标准,包括理念、指南、执行和声明合规性。由于MISRA C++:2023似乎不太可能整合所有的AUTOSAR规则,所以Perforce将评估与新MISRA C++:2023规则中与C++核心指南冲突的比例,并将其与AUTOSAR进行比较。

MISRA C++:2023的新准则

最后,还将有一些介绍新准则的文章。

MISRA C++:2023将提供定义类类型接口的指导规则。它提倡“规则0(Rule of Zero)”,这意味着它更倾向于不指定特殊成员函数,因为语言标准保证了编译器已经提供了预期的实现。

这与其他建议如“规则5”(或“规则6”,如果您还单独计算默认构造函数的话)相矛盾,后者规定您需要始终明确指定特殊成员函数。Perforce将讨论新规则如何处理现有指南所涵盖的漏洞。

不过,这也存在风险,从为AUTOSAR规则A12-0-1提供的合规示例中就可以看出:

class A // Compliant - the class A follow the "Rule of six" rule     {     public:       A(); // Non-default constructor       ~A() = default;       A(A const&) = default;       A& operator=(A const&) = default;       A(A&&) = delete;       A& operator=(A&&) = delete;     };

可以看到,只有移动函数(move functions)被删除了,而复制函数和析构函数被设置为默认。这样的代码可能是开发人员遵循“规则3”到“规则5”的代码进行扩展的结果,但开发人员试图通过删除新的移动函数来保留旧的行为。MISRA C++不允许这种特殊成员函数的组合;如果一个类提供了复制函数,那它必须同时提供移动函数。这个类的问题在于,它不能与容器一起使用。例如,当尝试声明一个该类型的向量时,由于缺少移动函数,会发生编译错误。需要注意的是,这个示例在AUTOSAR标准的18-03版本中得到了修正,规则的措辞也发生了变化,但并没有明确要求在提供复制函数时必须提供移动函数。

MISRA C++:2023将包括限制使用标准类型转换的指南。熟悉MISRA C:2012的开发人员可能期望有类似的类型转换规则,就像MISRA C基本类型定义的规则一样,但情况并非如此。

MISRA C++:2023要严格得多。原因是:与C不同,C++提供了函数重载,这取决于表达式的确切类型和自动占位符类型说明符,其中类型是从表达式派生的。如果不遵守规则,可能会出现这样的情况:包含头文件的函数重载比之前的函数重载匹配得更好,这可能是意料之外的。有一种安全的方法可以避免隐式转换,那就是使用具有整数基础类型的类型安全枚举类型。这种强类型的值不会被隐式转换。

使用Helix QAC,确保MISRA合规性

Perforce的Helix QAC是一款静态分析工具,在提供MISRA C和MISRA C++合规性检查以及许多其他有价值的分析功能方面处于领先地位。  

Helix QAC提供了合规模块,用于强制执行MISRA C和MISRA C++的所有版本和修订,包括MISRA C:2023。Perforce计划在标准发布时,提供完整的MISRA C++:2023合规性模块。

作者简介:

图片

弗兰克-范登博肯(Frank van den Beuken)

首席技术支持工程师,Perforce

作为技术支持专家,弗兰克在集成Perforce静态源代码分析解决方案以进行软件质量控制方面拥有超过20年的经验,服务于客户的软件开发环境。近年来,他专注于为各种编译器配置静态分析。他还提供代码质量培训和咨询服务。

Frank拥有Nijmegen大学数学与计算科学博士学位,研究领域为系统规范语言。

文章来源:https://bit.ly/3PS2wat

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

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

相关文章

【JAVA】日志打印java.util.logging.*函数自定义格式,并且显示调用时行号

1、JAVA自带的这样: 代码如下: import java.util.logging.*; Logger logger Logger.getLogger(MyLogger.class.toString()); logger.info("123");显示效果: 这样的格式,看起来不太好看,比如:会…

5分钟快速申请一个EDU教育邮箱

申请EDU教育邮箱 EDU教育邮箱概述应用JetBrains免费教育许可证Github学生包微软教育版语雀公益计划Navicat 申请EDU教育邮箱站点准备选择考取学位补充教育经历个人信息确认信息设置账号密码完善账户信息登录账号邮件收发测试 EDU教育邮箱 概述 EDU邮箱指的是教育邮箱&#xf…

百度SEO优化技巧与布局(提升网站排名的5种有效方法)

网站SEO关键词介绍: SEO(SearchEngineOptimization)即搜索引擎优化,是通过一系列技术手段和策略,让网站在搜索引擎中获得更好的排名和流量。关键词是SEO优化的重要组成部分,通过关键词布局合理&#xff0c…

小程序开发平台源码系统+社区团购小程序功能 带完整的搭建教程

今天来给大家分享一下小程序开发平台的社区团购小程序的功能。社区团购是一种基于社区概念的电子商务模式,它通过集合社区居民的需求,以团购的形式向供应商采购商品,以获得更优惠的价格和更方便快捷的购物体验。我们一起来看看他的搭建教程。…

从零开始学习C++:C++前言

【本节目标】 什么是CC发展史C的重要性如何学习C关于本门课程 1. 什么是C C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的 程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机&a…

港联证券:从AI到华为产业链 主流基金为何屡屡错过新科技

干流基金“踏空”科技股 本年以来,较少有干流基金司理拥抱从AI到华为工业链的科技股,除非基金产品合同“强制”买进。 Wind数据显示,截至目前,本年以来基金产品收益率最高的已超50%,年内收益超15%的基金产品也有数十…

《软件方法》2023版第1章(09)基本共识上的沟通,SysML

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 1.3 UML 1.3.2 使用UML的理由 1.3.2.5 基本共识上的沟通 符号标准并不是随便哪个人拍脑袋定下来,然后毫无道理地强迫大家接受。符号背后往往隐含着我们对某个学科的一些…

【玩转Redhat Linux 8.0系列 | 从命令行管理文件(一)】

今天继续分享一些Redhat Linux 8.0的知识,记得关注,会一直更新~ 描述Linux文件系统层次结构概念 学习目标 描述Linux如何组织文件,以及文件系统层次结构中各种目录的用途。 文件系统层次结构 Linux系统中的所有文件存储在文件系统中&…

移动硬盘频繁断开连接怎么办?

对于那些喜欢存储大量数据,在多台设备之间有数据传输需求的用户来说,拥有一个移动硬盘是比较便利的事情。但是移动硬盘在使用的过程中也可能会出现诸多问题,比如比较常见的频繁断开连接的故障。那么,移动硬盘频繁断开连接怎么办&a…

基于Lang-Chain(ChatGLM和ChatChat)知识库大语言模型的部署搭建

环境准备 阿里云个人认证后,可免费试用机器学习平台PAI,可提供适合大语言模型环境搭建的高配置服务器。 点击试用阿里云服务器 试用产品选择:选择交互式建模PAI-DSW 适合哪些场景 文章/知识库/帮助文档等的检索基于现有知识库实现问答… …

Go语言入门心法(六): http编程

Go语言入门心法(一): 基础语法 Go语言入门心法(二): 结构体 Go语言入门心法(三): 接口 Go语言入门心法(四): 异常体系 Go语言入门心法(五): 函数 一:go语言面向web编程认知 忙着去耍帅,后期补充完整............

Lumen全局光照你了解多少?在Twinmotion中怎么使用

lumen全局光照怎么开?在Twinmotion中lumen全局光照系统怎么使用呢?那么今天就跟着小编一起来这篇文章了解一下吧。 在 Path Tracer 之后,随着Lumen的发布,Twinmotion 变得越来越好。它是一个实时全局光照和反射系统,可…

基于 Debian 稳定分支发行版的Zephix 7 发布

导读Zephix 是一个基于 Debian 稳定版的实时 Linux 操作系统。它可以完全从可移动媒介上运行,而不触及用户系统磁盘上存储的任何文件。 Zephix 是一个基于 Debian 稳定版的实时 Linux 操作系统。它可以完全从可移动媒介上运行,而不触及用户系统磁盘上存…

在逍遥模拟器上安装LPSosed模块以及其Manager管理器

环境:win7 64位,python3.8.10,逍遥模拟器9.0.6,安卓版本9 参考我的文章: 在雷电模拟器9上安装magisk并安装LSPosed模块以及其Manager管理器(一)-CSDN博客 前置工作:先开启模拟器的…

数据结构之手撕链表(讲解➕源代码)

0.引言 我们在学习过顺序表之后,会发现两点不是很优秀的操作: 1.顺序表的头插和中间的插入: 非常麻烦,需要不断的覆盖数据。 2.动态开辟空间: a.一般动态开辟的空间都是以2倍的形式开辟,当…

图片批处理工具 PhotoMill X直装 for mac

PhotoMill X是一款强大的图像处理软件,它可以帮助用户快速地对照片进行编辑、调整和转换。它支持在单个或批量模式下处理大量的图像文件,并具有直观的用户界面和易于使用的工具。 PhotoMill X具有的功能有: 裁剪、缩放、旋转、调整明暗度、…

32 数据分析(下)pandas介绍

文章目录 工具excelTableauPower Queryjupytermatplotlibnumpypandas数据类型Series基础的SeriesSeries的字典操作增加表的索引名字和表名字索引操作 DataFrameDataFrame 的基础使用DataFrame的列方法------理解DataFrame的行列方法------使用loc 与 iloc 对齐操作SeriesDataFr…

寻找小红书达人技巧有哪些,小红书行业黑话汇总!

媒介在工作的时候,需要对本行业的名词有一定的了解,比如说在媒介进行达人探寻的过程中,对行业名词,也就是俗称的互联网黑话具有一定的敏感性,是大有帮助的。今天就来分享一下,寻找小红书达人技巧有哪些&…

【广州华锐互动】VR模拟电力生产事故,切身感受危险发生

随着科技的不断发展,虚拟现实(VR)技术已经在各个领域中得到了广泛的应用。其中,VR技术在电力安全事故还原中的应用,不仅可以帮助我们更好地理解和预防事故的发生,还可以为事故调查提供更为准确和直观的证据…

mysql自定义函数

函数简介 mysql 5.0开始支持函数,函数是存在数据库中的一段sql集合,调用函数可以减少很多工作量, 减少数据在数据库和应用服务器上的传输,对于提高数据处理的效率。参数类型为in类型,函数必须有返回值, 与…