<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

帶你走近MISRA C++:2023

北匯信息POLELINK ? 2024-04-30 08:24 ? 次閱讀

作者 | 給你小魚干
小編 | 不吃豬頭肉

隨著汽車工業邁入數字化轉型的新紀元,軟件的安全性與可靠性已躍升為設計和開發核心環節的重中之重。MISRA C++標準的誕生與演進,精準地回應了行業發展的需求。自MISRA C++標準首次面世以來,它便被奉為汽車軟件工程師在開發實踐中的圭臬。
11b82212-0688-11ef-9118-92fbcf53809c.png

MISRA C++的發展史
MISRA C++的起源可以追溯到MISRA C標準的成功制定和廣泛應用。MISRA C是一套針對C語言的編碼規范,首次發布于1998年,它迅速成為汽車行業中軟件安全性和可靠性的標桿。(回顧MISRA C:2012介紹請見文章

帶你走近MISRA C:2012》)隨著C++在工業界的普及,尤其是在汽車電子控制系統中,對C++的類似規范的需求日益增長?;贛ISRA C的成功經驗和市場需求,MISRA組織隨后發布了適用于C++03標準的編碼規范MISRA C++:2008。這是首個針對C++語言的MISRA標準,包含一系列的規則和指導原則,這些規則覆蓋了從編程實踐到代碼設計等多個方面,旨在幫助開發者編寫出更加安全和可靠的代碼。
MISRA C++:2008規范發布后,得到了業界的廣泛認可和采納。它不僅在汽車行業中得到了應用,還擴展到了航空、醫療設備和工業控制等多個領域,并對這些行業產生了深遠的影響。隨著C++語言標準的不斷更新和新特性的引入,MISRA C++:2008也在經歷不斷的修訂和更新,以保持與C++標準語言的同步,并覆蓋新出現的語言特性。MISRA C++:2008與AUTOSAR C++14
但隨著后續新版本C++標準的發布,MISRA C++:2008并未將新的C++語言特性納入,于是AUTOSAR組織發布了AUTOSAR C++14編碼規范。
AUTOSAR C++14在制定時,大量借鑒了MISRA C++:2008的規則。MISRA C++:2008是基于C++03標準制定的,而AUTOSAR C++14則是基于更新的C++14標準。AUTOSAR C++14吸收了約91%的MISRA C++:2008規則,并對其進行了擴展和更新,引入了針對C++11/14特性的規范。

11d8b946-0688-11ef-9118-92fbcf53809c.png

MISRA C++:2023
MISRA C++:2023發布于2023年10月,這是MISRA C++的最新版本。它為使用ISO/IEC 1488217) 開發的安全關鍵型軟件的組織提供指導。MISRA C++:2023規則分類
MISRA C++:2023整合了AUTOSAR C++14編碼規范, 共179條準則。這些規則按照性質分為兩類:Rule(規則)和Directive(指令),包含175條Rule和4條Directive。規則有三種不同類別:” Mandatory(強制)”、” Required(要求)”和“Advisory(建議)”, Mandatory類別的規則中包含5條Rule,Required規則中包含122條Rule和4條Directive,Advisory規則中包含48條Rule。
11feef76-0688-11ef-9118-92fbcf53809c.png圖1 MISRA C++:2023規則分類
122724e6-0688-11ef-9118-92fbcf53809c.png圖2 MISRA C++:2023規則類別MISRA C++:2023還引入了MISRA C++的Rule可判定性分類??膳卸ㄐ詤^分標準為是否能在任何情況下明確回答“該代碼是否遵循了這條規則?”這個問題。
123cb9fa-0688-11ef-9118-92fbcf53809c.png1257faf8-0688-11ef-9118-92fbcf53809c.png圖3 Rule的可判定性分類要注意的是,可判定性并不適用于Directive規則。接下來讓我們進一步了解MISRA C++:2023編碼規范。

1275b16a-0688-11ef-9118-92fbcf53809c.png

什么是 MISRA C++:2023 Rule 9.5.2,為什么它很重要?MISRA C++:2023 引入了Rule 9.5.2:“ for 范圍初始值設定項最多應包含一個函數調用”,以避免在基于范圍的 for 語句的 for 范圍初始值設定項創建臨時對象時可能發生的未定義行為。
為了理解為什么會發生這種情況,讓我們仔細看看基于 C++ 范圍的 for 循環。
什么是 C++ 中基于范圍的 for 循環?
在編程中,循環用于重復代碼塊。當我們知道要在代碼塊中循環多少次時會使用for循環。C++ 基于范圍的 for 循環是在 C++11 中引入的,作為容器迭代的簡潔表示法。傳統循環源自 C 語言,具有可選的循環初始化,然后是循環條件,最后是循環增量表達式。
傳統for循環可用于迭代容器,如下所示:

std::vector v = { "Example", "vector", "of", "strings" };

for ( auto &&i = v.begin(); i != v.end(); ++i ) {

std::cout << *i << “ “;?

}

std::cout << std::endl;?

使用基于范圍的for時,迭代器的使用是隱式的:

for ( auto &&s: v ) {

std::cout << s << “ “;?

}

對于同一循環,這是一個更簡單的表示法。C++ 語言標準指出它是以下方面的縮寫:

{

auto && __range = v;

auto __begin = __range;

auto __end = v.end();

for (; __begin != __end; ++__begin) {

auto &&s = *__begin;

std::cout << s << “ “;?

}

}

但是,這種表示法存在一定的局限性。在上面的示例中, __range 是用 v 初始化的,這是一個更簡單的變量,但也可以使用一個復雜的表達式,為其創建多個臨時對象。

讓我們考慮使用一個函數,該函數返回字符串的向量,并具有:?一個輸出用空格分隔的字符串的循環,如上所述;?第二個循環,打印第一個字符串的字母,用空格分隔

std::vectorcreateStrings() {

return { "Example”, "vector", "of", "strings" };

}

int main() {

for ( auto w: createStrings() ) { std::cout << w << " "; }?

std::cout << std::endl;?

for ( auto c: createStrings()[0] ) { std::cout << c << " "; }?

std::cout << std::endl;?

}

如果我們執行此操作,第一個循環將按預期運行,但第二個循環將調用未定義的行為 。問題是 createStrings()[0] 有兩個函數調用。最里面的調用是 createStrings 的調用 ,最外面的調用是對索引運算符[ ]的調用。

未定義行為的原因是 “ createStrings ”返回的臨時對象 用作“ operator[ ]”調用的參數,因此,根據 C++ 的規則,臨時對象的生存期不會延長。
MISRA C++:2023 Rule 9.5.2 如何防范未定義的行為
MISRA C++:2023 Rule 9.5.2 旨在防止這種情況。MISRA C++:2023 引入了規則 9.5.2,該規則要求for范圍初始值設定項最多應包含一個函數調用。
它還建議通過在循環范圍之前的單獨聲明中執行內部函數調用來解決此問題。例如:

auto strings = createStrings();

for ( auto c: strings[0] ) { std::cout << c << " "; }?

現在,初始值設定項中只有一個函數調用,因此生存期擴展具有所需的效果,并且行為已完全定義。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數字化
    +關注

    關注

    8

    文章

    7902

    瀏覽量

    61041
  • MISRA
    +關注

    關注

    0

    文章

    19

    瀏覽量

    6914
  • 汽車
    +關注

    關注

    12

    文章

    3077

    瀏覽量

    36347
收藏 人收藏

    評論

    相關推薦

    MISRA-C-:2004中文版

    MISRA-C-:2004 中文版
    發表于 06-04 11:52 ?0次下載

    C/C++代碼動態測試工具VectorCAST插樁功能演示#代碼動態測試 #C++

    C++代碼
    北匯信息POLELINK
    發布于 :2024年04月18日 11:57:45

    使用 MISRA C++2023? 避免基于范圍的 for 循環中的錯誤

    在前兩篇博客中,我們?向您介紹了新的 MISRA C++ 標準?和?C++ 的歷史?。在這篇博客中,我們將仔細研究以 C++ 中?for?循環為中心的特定規則。
    的頭像 發表于 03-28 13:53 ?273次閱讀
    使用 <b class='flag-5'>MISRA</b> <b class='flag-5'>C++</b>:<b class='flag-5'>2023</b>? 避免基于范圍的 for 循環中的錯誤

    汽車電子行業的MISRA C標準解讀

    之前分享了一些編程規范相關的文章,有位讀者提到了汽車電子行業的MISRA C標準,說這個很不錯。
    的頭像 發表于 01-17 11:03 ?444次閱讀

    代碼靜態測試工具Helix QAC 2023.4新發布

    Helix QAC 2023.4 為新的 MISRA C++2023 指南推出了 100% MISRA C++
    的頭像 發表于 01-13 12:25 ?218次閱讀
    代碼靜態測試工具Helix QAC 2023.4新發布

    C++簡史:C++是如何開始的

    MISRA C++2023,MISRA? C++ 標準的下一個版本,來了!為了幫助您做好準備,我們介紹了 Perforce 首席技術支持工
    的頭像 發表于 01-11 09:00 ?217次閱讀
    <b class='flag-5'>C++</b>簡史:<b class='flag-5'>C++</b>是如何開始的

    靜態代碼分析工具Helix QAC 2023.3:將100%覆蓋MISRA C++:2023?規則

    Helix QAC 2023.3預計將于2023年第四季度發布的新MISRA C++?指南,將100%覆蓋MISRA C++:
    的頭像 發表于 11-08 18:37 ?294次閱讀
    靜態代碼分析工具Helix QAC 2023.3:將100%覆蓋<b class='flag-5'>MISRA</b> <b class='flag-5'>C++</b>:<b class='flag-5'>2023</b>?規則

    C++之父新作帶你勾勒現代C++地圖

    為了幫助大家解決這些痛點問題,讓大家領略現代C++之美,掌握其中的精髓,更好地使用C++,C++之父Bjarne Stroustrup坐不住了,他親自操刀寫就了這本《C++之旅》!
    的頭像 發表于 10-30 16:35 ?526次閱讀
    <b class='flag-5'>C++</b>之父新作<b class='flag-5'>帶你</b>勾勒現代<b class='flag-5'>C++</b>地圖

    MBBF2023 | 5G-A速度帶你Get五大參會亮點!

    原文標題:MBBF2023 | 5G-A速度帶你Get五大參會亮點! 文章出處:【微信公眾號:華為】歡迎添加關注!文章轉載請注明出處。
    的頭像 發表于 09-06 19:25 ?950次閱讀
    MBBF<b class='flag-5'>2023</b> | 5G-A速度<b class='flag-5'>帶你</b>Get五大參會亮點!

    您需要了解的有關下一個MISRA?標準的信息:MISRA C++ 2023?簡介

    MISRA C++2023?是廣受期待的MISRA C++ ?標準的下一個版本,將于今年晚些時候發布。新版本將整合AUTOSAR C++1
    的頭像 發表于 08-25 18:06 ?1010次閱讀
    您需要了解的有關下一個<b class='flag-5'>MISRA</b>?標準的信息:<b class='flag-5'>MISRA</b> <b class='flag-5'>C++</b> <b class='flag-5'>2023</b>?簡介

    就在明天!“鴻蒙釗哥”帶你逛華為開發者大會2023

    點擊下方鏈接,預約快人一步 END 原文標題:就在明天!“鴻蒙釗哥”帶你逛華為開發者大會2023 文章出處:【微信公眾號:拓維信息】歡迎添加關注!文章轉載請注明出處。
    的頭像 發表于 08-04 17:25 ?836次閱讀

    靜態代碼分析器工具Helix QAC 2023.2: 提供 100% 的 MISRA C:2012 和 MISRA C:2023 規則覆蓋率

    Helix QAC 2023.2 提供 100% 的 MISRA C:2012 和 MISRA C:2023 規則覆蓋率,并更新相應的合規性模塊以支持 MISRA C:
    的頭像 發表于 07-31 22:53 ?843次閱讀
    靜態代碼分析器工具Helix QAC 2023.2: 提供 100% 的 <b class='flag-5'>MISRA</b> C:2012 和 <b class='flag-5'>MISRA</b> C:<b class='flag-5'>2023</b> 規則覆蓋率

    遵守 MISRA 如何提高C++應用的安全性

    MISRA提供了一套適用于任何軟件應用程序的全面指南,在確保軟件安全性和穩定性方面發揮著至關重要的作用。這些準則包含各個方面,例如避免比較運算符右側的副作用,以及不執行任何指針算術。雖然開發團隊通常
    的頭像 發表于 07-26 14:12 ?716次閱讀
    遵守 <b class='flag-5'>MISRA</b> 如何提高<b class='flag-5'>C++</b>應用的安全性

    一起探索C++的世界!

    C++
    YS YYDS
    發布于 :2023年07月07日 19:10:25

    MISRA C Rule Checker SQMlint V.1.03 用戶手冊

    MISRA C Rule Checker SQMlint V.1.03 用戶手冊
    發表于 06-26 20:20 ?0次下載
    <b class='flag-5'>MISRA</b> C Rule Checker SQMlint V.1.03 用戶手冊
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>