午夜网站国产欧美_加勒比视频亚洲无码_91亚洲人人在字幕国产_18禁止美女爆乳免费网站_被消防员c哭高h野外糙汉动漫_午夜精品视频在线无码_gogowww人体大胆裸体午液_2021自拍偷区亚洲综合第一页_国产欧美一区二区精品性色超碰_99國產精品無碼

Hi,您好,歡迎來到西安盛圖軟件科技有限公司!

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

發(fā)布時間:2023-10-16 15:41:24

MISRA C++ ?的背景


MISRA C++的當前版本發(fā)布于 2008 年。它為以 ISO C++ 2003 編寫的安全相關軟件的開發(fā)提供了專家指導。這套指南已經被廣泛采用,并在許多安全關鍵項目中成為了強制遵循的準。然而,自那時以來,C++語言發(fā)生了相當大的變化,新的版本引入了新的語言功能,并且改變了現(xiàn)有的特性。


使用較新版本的 C++語言開發(fā)的項目可能不符合 MISRA C++:2008 的所有規(guī)則,并且新特性可能不在其覆蓋范圍之內。為了給這些新版本提供指南,AUTOSAR 以 MISRA C++:2008 為基礎,結合其他標準的規(guī)則,為 C++14 制定了新的指南。MISRA C++工作組目前正在根據(jù) AUTOSAR 指南對 MISRA C++進行更新,以適用于 C++17,但其中包括了 MISRA 已確立的安全相關 C++開發(fā)的最佳實踐。


人們對新的 MISRA C++指南興趣濃厚。然而,由于 MISRA C++:2008 已被許多項目采用,所以對于改用新的指南,人們也存在一些擔憂。


MISRA C++:2023?系列文章預覽


在本系列文章中,將探討新標準的多個方面。


C++和 MISRA C++的歷史


首先,文章將概述 C++編程語言的歷史,從 1979 年 Bjarne Stroustrup 在貝爾實驗室提出概念,到 1991 年開始標準化,再到目前的 C++20 版本。


值得注意的是,C++20 中添加的一些主要功能在之前就已經討論過了?!澳K(modules)”和“概念(concepts)”就是這種情況,它們都是新功能,為并發(fā)編程的標準化功能提供庫實現(xiàn)(library implementations)和協(xié)程(coroutines)。直到現(xiàn)在,并發(fā)支持才成為指南的一部分。但在之前,這些功能已經在 Simula 編程語言中存在,與 C 語言的高效性能相結合,以提供程序組織和并發(fā)支持。


然而,必須指出,MISRA C++似乎將以 C++17 為基礎。造成這種情況的原因可能是,編譯器實現(xiàn)者需要時間來為所有語言特性提供支持,而且這些實現(xiàn)還需要經過認證才能用于安全關鍵項目。


隨著時間的推移,已經有許多不同的 C++編碼標準被編寫出來了。不僅是前文提到的 AUTOSAR 指南,還有許多其他流行的編碼標準在使用中。在今年的《汽車軟件開發(fā)狀況報告》中,介紹了 400 位汽車開發(fā)專業(yè)人士對于汽車軟件行業(yè)當前實踐和新興趨勢的問題的回答。隨著電動汽車和半自動駕駛汽車的持續(xù)發(fā)展,以及隨之而來的軟件組件的增加,研究結果繼續(xù)表明,安全性與防范性同樣重要,并且是人們關注的主要問題。遵守安全標準的要求越來越高,也反映了這一點。


該報告還顯示,仍然是汽車行業(yè)最流行的編碼標準,42%的受訪者使用 MISRA 編碼標準。鑒于 MISRA 的悠久歷史及其在汽車行業(yè)的深厚根基,這就不足為奇了。AUTOSAR 以 36%的比例位居第三。C++核心指南標準令人驚訝地排在第二位,占比 39%,盡管該標準與汽車行業(yè)沒有明顯的關系。它之所以受歡迎,可能是因為它涵蓋了開發(fā)人員想要使用的最新 C++語言特性。


您目前正在使用哪些編碼標準?



△《2023 年汽車軟件開發(fā)狀況報告》對于此問題的回應


C++編碼標準的方方面面


由 Bjarne Stroustrup 和 Herb Sutter 發(fā)起的 C++核心指南是一份不斷改進的動態(tài)文件。由于該標準涵蓋了最新的 C++語言功能,所以也影響著 AUTOSAR 標準的制定。AUTOSAR 包括了兩個標準之間的比較,顯示 C++核心準則中有 30%與 AUTOSAR 規(guī)則存在沖突。MISRA C++:2023 涵蓋了大部分 AUTOSAR 的問題,并且新的指南沒有直接使用 C++核心準則。


Perforce 將提供一篇專門的文章,全方位比較這些 C++編碼標準,包括理念、指南、執(zhí)行和聲明合規(guī)性。由于 MISRA C++:2023 似乎不太可能整合所有的 AUTOSAR 規(guī)則,所以 Perforce 將評估與新 MISRA C++:2023 規(guī)則中與 C++核心指南沖突的比例,并將其與 AUTOSAR 進行比較。


MISRA C++:2023 的新準則


最后,還將有一些介紹新準則的文章。


MISRA C++:2023 將提供定義類類型接口的指導規(guī)則。它提倡“規(guī)則 0(Rule of Zero)”,這意味著它更傾向于不指定特殊成員函數(shù),因為語言標準保證了編譯器已經提供了預期的實現(xiàn)。


這與其他建議如“規(guī)則 5”(或“規(guī)則 6”,如果您還單獨計算默認構造函數(shù)的話)相矛盾,后者規(guī)定您需要始終明確指定特殊成員函數(shù)。Perforce 將討論新規(guī)則如何處理現(xiàn)有指南所涵蓋的漏洞。


不過,這也存在風險,從為 AUTOSAR 規(guī)則 A12-0-1 提供的合規(guī)示例中就可以看出:



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;    };

復制代碼


可以看到,只有移動函數(shù)(move functions)被刪除了,而復制函數(shù)和析構函數(shù)被設置為默認。這樣的代碼可能是開發(fā)人員遵循“規(guī)則 3”到“規(guī)則 5”的代碼進行擴展的結果,但開發(fā)人員試圖通過刪除新的移動函數(shù)來保留舊的行為。MISRA C++不允許這種特殊成員函數(shù)的組合;如果一個類提供了復制函數(shù),那它必須同時提供移動函數(shù)。這個類的問題在于,它不能與容器一起使用。例如,當嘗試聲明一個該類型的向量時,由于缺少移動函數(shù),會發(fā)生編譯錯誤。需要注意的是,這個示例在 AUTOSAR 標準的 18-03 版本中得到了修正,規(guī)則的措辭也發(fā)生了變化,但并沒有明確要求在提供復制函數(shù)時必須提供移動函數(shù)。


MISRA C++:2023 將包括限制使用標準類型轉換的指南。熟悉 MISRA C:2012 的開發(fā)人員可能期望有類似的類型轉換規(guī)則,就像 MISRA C 基本類型定義的規(guī)則一樣,但情況并非如此。


MISRA C++:2023 要嚴格得多。原因是:與 C 不同,C++提供了函數(shù)重載,這取決于表達式的確切類型和自動占位符類型說明符,其中類型是從表達式派生的。如果不遵守規(guī)則,可能會出現(xiàn)這樣的情況:包含頭文件的函數(shù)重載比之前的函數(shù)重載匹配得更好,這可能是意料之外的。有一種安全的方法可以避免隱式轉換,那就是使用具有整數(shù)基礎類型的類型安全枚舉類型。這種強類型的值不會被隱式轉換。


使用 Helix QAC,確保 MISRA 合規(guī)性


Perforce 的Helix QAC是一款靜態(tài)分析工具,在提供 MISRA C 和 MISRA C++合規(guī)性檢查以及許多其他有價值的分析功能方面處于領先地位。  


Helix QAC 提供了合規(guī)模塊,用于強制執(zhí)行 MISRA C 和 MISRA C++的所有版本和修訂,包括 MISRA C:2023。Perforce 計劃在標準發(fā)布時,提供完整的 MISRA C++:2023 合規(guī)性模塊。




上一篇:讓你遙遙領先的七個編程習慣
下一篇:盛圖科技|低代碼技術這么香,怎么把它的開發(fā)特點發(fā)揮到極致?

歡迎登錄盛圖科技

歡迎注冊盛圖科技

已有賬號,立即登錄