您需要了解的有关下一个MISRA®标准的信息:MISRA C++ 2023®简介

misra c++:2023®是广受期待的misra c++ ®标准的下一个版本,将于今年晚些时候发布。新版本将整合autosar c++14指南,并支持c++的最新版本。
misra®是由汽车行业软件可靠性协会(misra)开发的一套c和c++编码标准,不仅是汽车行业的最佳标准之一,也是任何使用嵌入式系统的行业的最佳标准之一。
为了帮助您为即将发布的版本做好准备,我们推出了一个由我们的misra专家frank van den beuken博士撰写的关于misra c++:2023概述的博客系列。
1️⃣misra c++ ®背景
misra c++于2008年发布。它为iso c++2003编写的安全相关软件的开发提供了专家指导。这套指南已被广泛采用,合规性已成为许多安全关键项目的强制性要求。然而,从那时起,c++语言发生了很大变化,新版本引入了新的语言功能并改变了现有的功能。
使用较新c++语言版本的项目可能不符合misra c++ 2008的所有规则。为了为这些后续版本提供指南,autosar为c++14开发了新的指南,该指南基于misra c++:2008,但通过其他标准的规则进行了增强。
misra c++工作组目前正在根据autosar指南对misra c++进行更新,该适用于c++17,但包括misra在安全相关c++开发方面的既定最佳实践。预计更新后的标准将于今年晚些时候发布。
人们对新的misra c++指南非常感兴趣。然而,由于misra c++:2008已被许多项目采用,此对改用新指南的影响存在一些担忧。
2️⃣misra c++:2023® 博客系列预览
在本博客系列中,我们将讨论新标准的多个方面。
▶️c++和misra c++的历史
我们将从c++编程语言的历史概述开始,从1979年贝尔实验室的bjarne stroustrup提出的c++编程语言概念,到1991年开始标准化,再到目前的c++20版本。
值得注意的是,c++20中添加的一些主要功能在很久以前就已经讨论过了。模块和概念就是这种情况,它们是为并发编程的标准化特性提供库实现和协同程序的新颖特性。直到现在,并发支持才成为标准的一部分,尽管这些是与程序组织一起与c的效率相结合的simula编程语言功能。
然而,必须指出的是,misra c++仍然基于c++17。主要原因是编译器的实现程序需要时间来为所有语言功能提供支持,然后此类实现也需要经过认证才能用于安全关键项目。
随着时间的推移,已经编写了许多不同的c++编码标准。我们已经提到了autosar指南,但也有许多其他流行的编码标准在使用中。今年的《汽车软件开发状况报告 》 介绍了400名汽车开发专业人士对汽车软件行业当前实践和新兴趋势的回答。随着电动和半自动驾驶汽车发展的持续增长,以及随之而来的软件组件的增加,研究结果继续表明 ,信息安全与功能安全一样重要,这是一个主要问题。这反映在对遵守安全标准的要求日益增加。
报告还显示,misra仍然是汽车行业最受欢迎的编码标准,42% 的受访者使用misra编码标准。鉴于misra的悠久历史及其汽车根源,这并不奇怪。 autosar是一种在汽车软件平台背景下开发的最新编码标准,其最终更新于2018年,以 36% 的得票率位居第三。c++核心指南标准出人意料地以 39% 的得票率位居第二,尽管该标准与汽车行业没有明显的关系。它如此受欢迎可能是因为它涵盖了开发人员想要使用的最新c++语言功能。
▶️c++编码标准的几个方面
该标准由bjarne stroustrup和herb sutter推出,是一份不断改进的动态文件。c++核心指南也被用作autosar的来源,因为它涵盖了最新的c++语言功能。autosar包括两个标准之间的比较,表明30%的c++核心指南与autosar规则冲突。misra c++:2023继承了autosar的许多规则,但没有直接引用c++核心指南。
我们将专门写一篇博客来比较这些c++编码标准的各个方面,包括理念、指南、实施和声明合规性。由于misra c++:2023似乎不太可能接受所有autosar规则,我们将评估与c++核心指南相冲突的规则部分是否仍然如此之大。
▶️misra c++:2023 的新指南和新规则
最后,我们将在一些博客中专门介绍一些新颖的指南。
misra c++规则12.0.1 “ 应适当提供特殊成员功能” 是一项新规则,为定义类类型的接口提供了指导。它提倡“零规则”, 它提倡“零规则”,这意味着它不喜欢指定特殊的成员函数,因为语言标准已经保证编译器已经提供了预期的实现。
这与其他指南相矛盾,例如“五法则”(如果还单独计算默认构造函数,则为六),该指南指出需要始终显式指定所有特殊成员函数。
但是,这也存在风险,从为 autosar 规则 a12-0-1 提供的合规示例可以看出:
plaintext
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; 
    }; 
我们可以看到,只有移动构造函数被删除,复制函数和析构函数是默认的。此代码可能是开发人员将遵循“三法则”的代码扩展为“五法则”的结果,但试图通过删除新的移动构造函数来保留旧的行为结果。misra c++不允许这种特殊成员函数的组合; 如果一个类提供复制函数,那么它也必须提供移动构造函数。该类的问题在于它不能与容器一起使用,例如,当试图声明该类型的向量时,由于缺少移动构造函数,将发生编译错误。
预计会产生重大影响的准则是细则4.0.6,“数字类型之间的分配应适当”。此规则禁止许多隐式类型转换。熟悉 misra c:2012 的开发人员可能希望拥有与 misra c基本类型定义的类似类型转换规则,但事实并非如此。
misra c++ 要严格得多,这是有原因的:与 c 相反,c++ 提供了函数重载,这取决于表达式的确切类型和自动占位符类型说明符,其中类型是从表达式派生的。如果不遵守规则,则可能是包含头文件会导致函数重载比之前匹配的函数匹配得更好,这可能是出乎意料的。有一种安全的方法可以避免隐式转换,方法是使用具有整型基础类型的类型安全枚举类型。此类强类型的值不受隐式转换的影响。
3️⃣确保misra符合helix qac的要求
perforce的 helix qac 是一种静态分析工具,在提供misra c和misra c++合规性检查以及许多其他有价值的分析功能方面处于领先地位。
helix qac提供合规模块,用于执行misra c和misra c++的所有版本和修订,包括misra c:2023。perforce计划在正式发布日期临近时提供完整的misra c++:2023合规模块。

丰田新车型全球首次搭载电子后视镜
本源物联发布最新5G工业路由器BC5521
卓岚信息科技RS232/485联网模块ZLSN4000概述
阐述无人机在飞行中影响安全的因素
MC33886的并联问题解析
您需要了解的有关下一个MISRA®标准的信息:MISRA C++ 2023®简介
s11环形变压器空载损耗的国家标准值
微软连续13年被Gartner®评为“销售能力自动化平台领导者”
电信设备制造如何成功的转型到AIoT
PF-4型恒温仪电路及应用
Aptina为前向视频应用推出带姿势启用功能的1080p全高清移动传感器
重要的EMC知识及法则介绍
安森美半导体展示符合新的高通快速充电3.0的充电器
电机创新应用话题热度不减 行业交流怎能错过
Oculus TV创造一个虚拟现实环境 还能使用视觉控制
GPT-4催生的接口IP市场空间
关于物联网企业的盈利方式分析和介绍
AC/DC数字电源参考设计方案
防护口罩气体交换压力差测试仪的特点介绍
英特尔林怡颜指出虚拟内容分发网络和云游戏或将成为5G的杀手级应用