91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

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++的類似規范的需求日益增長。基于MISRA 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

    文章

    9522

    瀏覽量

    63578
  • MISRA
    +關注

    關注

    0

    文章

    22

    瀏覽量

    7225
  • 汽車
    +關注

    關注

    15

    文章

    3858

    瀏覽量

    39546
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    主流的 MCU 開發語言為什么是 C 而不是 C++

    在單片機的地界兒里,C語言穩坐中軍帳,C++想分杯羹?難嘍。咱電子工程師天天跟那針尖大的內存空間較勁,C++那些花里胡哨的玩意兒,在這兒真玩不轉。先說內存這道坎兒。您當stm32f4的256kRAM
    的頭像 發表于 05-21 10:33 ?443次閱讀
    主流的 MCU 開發語言為什么是 <b class='flag-5'>C</b> 而不是 <b class='flag-5'>C++</b>?

    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 ?434次閱讀
    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 ?885次閱讀
    <b class='flag-5'>MISRA</b> <b class='flag-5'>C</b>:2025新標準解析:新增規則、優化點與靜態代碼分析工具支持(Perforce QAC、Klocwork)

    Spire.XLS for C++組件說明

    Spire.XLS for C++ 是一款專業的 C++ Excel 組件,可以用在各種 C++ 框架和應用程序中。Spire.XLS for C++ 提供了一個對象模型 Excel
    的頭像 發表于 01-14 09:40 ?623次閱讀
    Spire.XLS for <b class='flag-5'>C++</b>組件說明

    同樣是函數,在CC++中有什么區別

    同樣是函數,在 CC++ 中有什么區別? 第一個返回值。 C語言的函數可以不寫返回值類型,編譯器會默認為返回 int。 但是 C++ 的函數,除了構造和析構這兩個特殊的函數,必須
    的頭像 發表于 11-29 10:25 ?911次閱讀

    C7000 C/C++優化指南用戶手冊

    電子發燒友網站提供《C7000 C/C++優化指南用戶手冊.pdf》資料免費下載
    發表于 11-09 15:00 ?0次下載
    <b class='flag-5'>C</b>7000 <b class='flag-5'>C</b>/<b class='flag-5'>C++</b>優化指南用戶手冊

    TMS320C6000優化C/C++編譯器v8.3.x

    電子發燒友網站提供《TMS320C6000優化C/C++編譯器v8.3.x.pdf》資料免費下載
    發表于 11-01 09:35 ?1次下載
    TMS320<b class='flag-5'>C</b>6000優化<b class='flag-5'>C</b>/<b class='flag-5'>C++</b>編譯器v8.3.x

    C語言和C++中結構體的區別

    同樣是結構體,看看在C語言和C++中有什么區別?
    的頭像 發表于 10-30 15:11 ?770次閱讀

    C7000優化C/C++編譯器

    電子發燒友網站提供《C7000優化C/C++編譯器.pdf》資料免費下載
    發表于 10-30 09:45 ?0次下載
    <b class='flag-5'>C</b>7000優化<b class='flag-5'>C</b>/<b class='flag-5'>C++</b>編譯器

    C2000? MISRA-C策略

    電子發燒友網站提供《C2000? MISRA-C策略.pdf》資料免費下載
    發表于 10-11 11:43 ?0次下載
    <b class='flag-5'>C</b>2000? <b class='flag-5'>MISRA-C</b>策略

    embOS的MISRA-C:2012一致性

    MISRA C是汽車工業軟件可靠性協會(MISRA)開發的一套針對C編程語言的軟件開發指南,目的是提升嵌入式系統的安全性和可移植性。2012發布的M
    的頭像 發表于 08-20 11:35 ?878次閱讀

    whitepaper-perforce-what-is-misra

    如果您熟悉嵌入式軟件的世界,您可能聽說過安全關鍵系統的MISRA編碼準則和合規性。最初為在汽車嵌入式軟件行業,MISRA C for CC++
    發表于 08-08 15:54 ?0次下載

    OpenVINO2024 C++推理使用技巧

    很多人都使用OpenVINO新版的C++ 或者Python的SDK,都覺得非常好用,OpenVINO2022之后的版本C++ SDK做了大量的優化與整理,已經是非常貼近開發的使用習慣與推理方式。與OpenCV的Mat對象對接方式更是幾乎無縫對接,非常的方便好用。
    的頭像 發表于 07-26 09:20 ?1569次閱讀

    C++語言基礎知識

    電子發燒友網站提供《C++語言基礎知識.pdf》資料免費下載
    發表于 07-19 10:58 ?10次下載

    C++中實現類似instanceof的方法

    C++有多態與繼承,但是很多人開始學習C++,有時候會面臨一個常見問題,就是如何向下轉型,特別是不知道具體類型的時候,這個時候就希望C++ 可以向Java或者Python中有instanceof這個
    的頭像 發表于 07-18 10:16 ?945次閱讀
    <b class='flag-5'>C++</b>中實現類似instanceof的方法
    主站蜘蛛池模板: 天堂资源www天堂在线 | 日本成人视屏 | 午夜大片免费完整在线看 | 伦理片日本韩国电影三级在线观看 | 性夜黄a爽影免费看 | 亚洲视频一区二区 | 成人欧美精品一区二区不卡 | 啪啪中文字幕 | 一区二区三区电影 | 丁香综合在线 | 免费在线观看视频 | 国产色系视频在线观看免费 | 天堂资源在线官网bt | 色www永久免费 | 老师办公室高h文小说 | 日韩毛片高清免费 | 午夜神马福利影院 | 又粗又长又大真舒服好爽漫画 | 四虎必出精品亚洲高清 | 午夜毛片福利 | 在线视频网址 | 国产乱理论片在线观看理论 | www射射一区| 午夜视频免费在线 | 六月激情丁香 | 亚洲成人看片 | аⅴ资源天堂8在线 | 伊人久久大线蕉香港三级 | 波多野吉衣一区二区三区在线观看 | 美女一级免费毛片 | 国产一区二区影院 | 午夜美女视频在线观看高清 | 日韩美香港a一级毛片 | 久久久久久夜精品精品免费 | 男生女生靠逼视频 | 四虎永久免费在线 | 天堂在线中文无弹窗全文阅读 | 天天做天天爽爽快快 | 72种姿势欧美久久久久大黄蕉 | 黄色a毛片 | 欧美精品四虎在线观看 |