0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

北汇信息POLELINK 2023-08-25 18:06 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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++语言功能。

wKgaomTofFmAeNoeAAFFnmIeNZ4932.png

▶️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合规模块。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 测试
    +关注

    关注

    8

    文章

    6043

    浏览量

    130745
  • 嵌入式
    +关注

    关注

    5186

    文章

    20169

    浏览量

    329100
  • MISRA
    +关注

    关注

    0

    文章

    22

    浏览量

    7400
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CC++之间的联系

    控制能力,这点与C语言相似,使得它们在系统编程、嵌入式系统等领域都得到广泛应用。 3、发展历程: C++正是在C语言的基础上逐步发展起来的,C
    发表于 12-11 06:51

    C语言和C++之间的区别是什么

    处理的问题时抛出异常,并在其他地方捕获和处理这些异常。 C语言没有内建的异常处理机制,般通过返回错误代码或设置全局错误标志等方式处理错误。 5、标准库支持: C++拥有丰富且强大的
    发表于 12-11 06:23

    C/C++条件编译

    。 #elif:结合 #if 使用,表示如果前面的条件不成立,继续判断下一个条件。 #else:与 #if 或 #elif 配合使用,表示条件不成立时执行下面的代码块。 #endif:结束条件编译块。
    发表于 12-05 06:21

    电缆槽:需要了解的电缆管理知识

    ,保护电缆免受物理损坏或潜在的电气火灾。在本文中,我们将介绍有关电缆线槽的所有信息,使您能够根据自己的特定需求做出正确的选择。 什么是电缆槽? 电缆槽是种空心通道,有助于封闭和保护家庭或办公室内的网络和电缆。电缆
    的头像 发表于 12-02 10:33 128次阅读

    科技云报到:西湖大学、智元机器人都选它,存储成为AI下一个风口

    科技云报到:西湖大学、智元机器人都选它,存储成为AI下一个风口
    的头像 发表于 09-03 11:24 539次阅读

    【原创】TDMS设置下一个写入位置函数的摸索

    labview在20版本前,tdms都有高级函数,写入文件位置set file positon,但是在20版本后被取消了。取而代之是‘tdms设置下一个写入位置函数’ 本意是想利用tdms设置
    发表于 08-11 20:54

    AI玩具或成为下一个万亿新赛道

    如果你将拥有家庭新成员,你首先会想到什么?是孩子还是宠物?如果我说你下一个家庭成员,或许是会“察言观色”的AI玩具,这件事是不是听上
    的头像 发表于 07-29 10:15 910次阅读

    Helix QAC 2025.1 重磅发布!MISRA C:2025® 100%覆盖

    Helix QAC 2025.1新增功能 Helix QAC 2025.1实现了对新版MISRA C:2025®标准的 100% 覆盖,并提供对应的合规模块。此版本还扩展了对 CERT C
    的头像 发表于 05-13 16:48 1147次阅读
    Helix QAC 2025.1 重磅发布!<b class='flag-5'>MISRA</b> <b class='flag-5'>C</b>:2025® 100%覆盖

    MISRA C:2025新标准解析:新增规则、优化点与静态代码分析工具支持(Perforce QAC、Klocwork)

    MISRA C:2025®发布!新增5条规则,并对部分现有规则进行了扩展、重组,以进步简化安全关键型系统的开发流程。如何实现最新MISRA合规性?
    的头像 发表于 05-08 17:58 1912次阅读
    <b class='flag-5'>MISRA</b> <b class='flag-5'>C</b>:2025新<b class='flag-5'>标准</b>解析:新增规则、优化点与静态代码分析工具支持(Perforce QAC、Klocwork)

    基于LockAI视觉识别模块:C++使用图像的统计信息

    在图像处理中,统计信息可以帮助我们了解图像的特性,例如区域内的像素分布、颜色转换以及特定区域的分析。本文将介绍基于LockAI视觉识别模块如何提取兴趣区域(ROI)、转换颜色通道、计算均值和标准差,以及查找最小值和最大值,并通过
    的头像 发表于 05-08 10:09 566次阅读
    基于LockAI视觉识别模块:<b class='flag-5'>C++</b>使用图像的统计<b class='flag-5'>信息</b>

    ad7616 burst模式读取数据时,是否可以在下一个convst启动转换?

    ad7616 burst模式读取数据时,是否可以在下一个convst启动转换,但busy还没有拉低的情况下继续读取上次转换的数据吗?主要是串行读取时,有可能出现convst临界的情况,如果这样可以的话,能够提升小部分con
    发表于 04-15 07:50

    C++学到什么程度可以找工作?

    C++学到什么程度可以找工作?要使用C++找到工作,特别是作为软件开发人员或相关职位,通常需要掌握以下几个方面: 1. **语言基础**:你需要C
    发表于 03-13 10:19

    基于OpenHarmony标准系统的C++公共基础类库案例:ThreadPoll

    1、程序简介该程序是基于OpenHarmony标准系统的C++公共基础类库的线程池处理:ThreadPoll。本案例完成如下工作:创建1线程池,设置该线程池内部有1024
    的头像 发表于 02-10 18:09 613次阅读
    基于OpenHarmony<b class='flag-5'>标准</b>系统的<b class='flag-5'>C++</b>公共基础类库案例:ThreadPoll

    基于OpenHarmony标准系统的C++公共基础类库案例:Semaphore

    1、程序简介该程序是基于OpenHarmony标准系统的C++公共基础类库的线程处理:Sempahore。本案例完成如下工作:(1)无名信号量使用方法定义1无名信号量,1
    的头像 发表于 02-10 18:08 643次阅读
    基于OpenHarmony<b class='flag-5'>标准</b>系统的<b class='flag-5'>C++</b>公共基础类库案例:Semaphore

    Spire.XLS for C++组件说明

    Spire.XLS for C++款专业的 C++ Excel 组件,可以用在各种 C++ 框架和应用程序中。Spire.XLS for C+
    的头像 发表于 01-14 09:40 1306次阅读
    Spire.XLS for <b class='flag-5'>C++</b>组件说明