在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

Perforce靜態代碼分析專家解讀MISRA C++:2023?新標準:如何安全、高效地使用基于范圍的for循環,防范未定義行

龍智 ? 來源:jf_15970448 ? 作者:jf_15970448 ? 2024-06-18 12:57 ? 次閱讀

MISRA C++:2023——MISRA? C++ 標準的下一個版本來了!為了幫助您了解 MISRA C++:2023相比于之前版本的變化,我們將繼續為您帶來Perforce首席技術支持工程師Frank van den Beuken博士的博客系列,本期為第三篇。

在前兩篇系列文章中,我們向您介紹了新的MISRA C++ 標準C++簡史。本文,我們將仔細研究C++中以for循環為中心的特定規則。

什么是MISRA C++:2023規則9.5.2,為什么它很重要?

MISRA C++:2023 引入了規則 9.5.2 “for-range 初始值設定項最多應包含一個函數調用”,以避免在基于范圍的for語句的 for-range初始值設定項創建臨時對象時可能發生的未定義行為。

要了解為什么會發生這種情況,讓我們仔細看看基于C++范圍的for循環。

C++中基于范圍的for循環是什么?

編程中,循環用于重復代碼塊。當您知道要循環訪問代碼塊的次數時,可以使用for循環。

C++基于范圍的for循環是在C++ 11中引入的,作為容器迭代的簡潔表示法。

傳統的for循環起源于C語言,具有可選的循環初始化,然后是循環條件,最后是循環增量表達式。

傳統for循環可用于迭代容器,如下所示:

std::vector v = { "Example", "vector", "of", "strings" }; for ( auto &&i = v.begin(); i != v.end(); ++i ) {   std::cout 

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

for ( auto &&s: v ) {   std::cout 

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

{   auto && __range = v;   auto __begin = __range;   auto __end = v.end();    for (; __begin != __end; ++__begin) {     auto &&s = *__begin;     std::cout 

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

讓我們考慮使用一個函數,該函數返回字符串的向量,并具有:

一個循環,輸出以空格分隔的字符串,如上所述

打印第一個字符串的字母的第二個循環,用空格分隔:

std::vector createStrings() {   return { "Example”, "vector", "of", "strings" }; } int main() {   for ( auto w: createStrings() ) { std::cout 

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

出現未定義行為的原因是,“createStrings”返回的臨時對象被用作“operator[]”調用的參數,因此,根據C++的規則,臨時對象不會延長其生命周期。

MISRA C++:2023規則9.5.2 如何防范未定義行為

MISRA C++:2023規則 9.5.2 旨在防止這種情況。MISRA C++:2023引入了規則 9.5.2,該規則要求for-range-initializer應最多包含一個函數調用。

它還建議通過在range-for循環之前的單獨聲明中執行內部函數調用來解決此問題。例如:

auto strings = createStrings(); for ( auto c: strings[0] ) { std::cout 

現在,初始值設定項中只有一個函數調用,因此生命周期擴展就能達到預期效果,并且行為已完全定義。

請注意,此問題已在C++23 中得到解決,其中初始值設定項的所有臨時值的生命周期都擴展到整個for語句。

使用Perforce Helix QAC強制執行MISRA C++:2023 規則

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

Helix QAC通過其標準的合規模塊為 MISRA C++:2023 規則提供 100% 的執行覆蓋率,該模塊現已推出。通過靜態分析工具Helix QAC可查找并報告C和 C++中違反MISRA規則和指令的行為。

- END -

文章來源:https://bit.ly/3VJY8yJ

作者簡介:

Frank van den Beuken,首席技術支持工程師

作為技術支持專家,Frank 在集成 Perforce 靜態源代碼分析解決方案方面擁有超過 20 年的經驗,可在客戶軟件開發環境中進行軟件質量控制。近年來,他專注于為各種編譯器配置靜態分析。他還提供代碼質量培訓和咨詢。Frank 在奈梅亨大學獲得數學和計算機科學博士學位,研究系統規范語言。

立即了解為什么Helix QAC是 MISRA C++的最佳靜態代碼分析器,歡迎咨詢Perforce中國授權合作伙伴——龍智:

審核編輯 黃宇

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

    關注

    1

    文章

    29

    瀏覽量

    14718
  • C++
    C++
    +關注

    關注

    22

    文章

    2117

    瀏覽量

    74859
  • 代碼
    +關注

    關注

    30

    文章

    4891

    瀏覽量

    70347
  • MISRA
    +關注

    關注

    0

    文章

    22

    瀏覽量

    7187
收藏 人收藏

    評論

    相關推薦
    熱點推薦

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

    代碼靜態測試工具Perforce QAC 2025.1新特性

    Perforce QAC 2025.1實現了對新發布的MISRA C:2025?標準的100%覆蓋,并提供了對應的新合規模塊。該版本還擴展了對CERT
    的頭像 發表于 04-21 15:14 ?278次閱讀
    <b class='flag-5'>代碼</b><b class='flag-5'>靜態</b>測試工具<b class='flag-5'>Perforce</b> QAC 2025.1新特性

    Perforce品牌及產品名更新:涵蓋版本控制Perforce P4(原Helix Core)、靜態代碼分析Perforce QAC(原Helix QAC)等

    Perforce推出全新P4平臺及P4 One客戶端!從廣為人知的“P4”到Helix Core到Perforce P4,此次品牌重塑是一次初心回歸,也是對開發者和數字創作團隊需求的深度回應。一起來了解更多吧~
    的頭像 發表于 03-28 15:04 ?508次閱讀
    <b class='flag-5'>Perforce</b>品牌及產品名更新:涵蓋版本控制<b class='flag-5'>Perforce</b> P4(原Helix Core)、<b class='flag-5'>靜態</b><b class='flag-5'>代碼</b><b class='flag-5'>分析</b><b class='flag-5'>Perforce</b> QAC(原Helix QAC)等

    創建了用于OpenVINO?推理的自定義C++和Python代碼,從C++代碼中獲得的結果與Python代碼不同是為什么?

    創建了用于OpenVINO?推理的自定義 C++ 和 Python* 代碼。 在兩個推理過程中使用相同的圖像和模型。 從 C++ 代碼
    發表于 03-06 06:22

    緩沖區溢出漏洞的原理、成因、類型及最佳防范實踐(借助Perforce 的Klocwork/Hleix QAC等靜態代碼分析工具)

    本期來認識軟件漏洞的“??汀薄彌_區溢出,C/C++開發者尤其要注意!全面了解該漏洞的成因、類型、常見示例,以及如何借助Klocwork、Helix QAC等SAST工具進行防護。
    的頭像 發表于 03-04 16:39 ?780次閱讀
    緩沖區溢出漏洞的原理、成因、類型及最佳<b class='flag-5'>防范</b>實踐(借助<b class='flag-5'>Perforce</b> 的Klocwork/Hleix QAC等<b class='flag-5'>靜態</b><b class='flag-5'>代碼</b><b class='flag-5'>分析</b>工具)

    基于OpenHarmony標準系統的C++公共基礎類庫案例:Semaphore

    1、程序簡介該程序是基于OpenHarmony標準系統的C++公共基礎類庫的線程處理:Sempahore。本案例完成如下工作:(1)無名信號量使用方法定義1個無名信號量,1個供無名信號量管理
    的頭像 發表于 02-10 18:08 ?299次閱讀
    基于OpenHarmony<b class='flag-5'>標準</b>系統的<b class='flag-5'>C++</b>公共基礎類庫案例:Semaphore

    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>策略

    PSOC6將藍牙A2DP源移植到STM32未定義引用\"\" 錯誤,如何解決?

    我正在嘗試將 PSOC6 藍牙 A2DP 信號源導入 STM32。 但我檢查了所有內容,卻得到一個未定義引用的錯誤,如何解決?
    發表于 09-23 06:15

    embOS的MISRA-C:2012一致性

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

    whitepaper-perforce-what-is-misra

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

    代碼靜態測試工具Klocwork 2024.2新發布

    Klocwork 2024.2 為現代?C/C++?分析引擎引入了顯著的準確性和性能改進。此版本還包括增強的安全性和身份驗證功能以及改進的用戶體驗,以及?
    的頭像 發表于 08-06 12:16 ?527次閱讀
    <b class='flag-5'>代碼</b><b class='flag-5'>靜態</b>測試工具Klocwork 2024.2新發布

    GD32F3使用串口DMA時,相應bsp里drv_dma.h文件中含有dma_subperipheral_enum報未定義錯誤的原因?

    GD32F3使用串口DMA時,相應bsp里drv_dma.h文件中含有dma_subperipheral_enum,報未定義錯誤
    發表于 07-12 08:55

    SDF工程編譯報錯未定義是怎么回事?

    調用例程頭文件中xSemaphoreHandle audio_hal_lock和timer_callback編譯報錯未定義,這是什么問題 F:/embedded/esp-idf/esp-adf
    發表于 06-28 08:25

    ESP8266報錯CONFIG_FREERTOS_HZ未定義,怎么解決這個問題?

    SDK用的是EPS8266_RTOS_SDK,在github上下載的最新版在vscode 上用這個函數時vTaskDelay(1000 / portTICK_PERIOD_MS);portTICK_PERIOD_MS報錯,提示CONFIG_FREERTOS_HZ未定義,在文件里面沒找到這個宏
    發表于 06-19 06:06
    主站蜘蛛池模板: 狠狠操狠狠操 | 黄色一级日本 | 91av成人| 欧美xxxx色视频在线观看 | 亚洲怡红院在线观看 | 99成人在线 | 国产农村三片免费网站 | 入逼视频| 色综合色综合 | 看黄在线| www.男人 | 高清一区二区三区免费 | 亚洲免费国产 | 播放欧亚一级特黄录像 | 免费任我爽橹视频在线观看 | 一色屋成人免费精品网 | 久草a视频| 5x性区m免费毛片视频看看 | 97色偷偷| 日本不卡在线观看 | 99久久免费午夜国产精品 | 天天摸天天躁天天添天天爽 | 在线观看二区三区午夜 | 欧美精品亚洲网站 | 午夜精品久久久久久99热 | 日本免费黄网站 | 日本中文在线三级在线播放 | 正在播放国产乱子伦视频 | 黄色一级日本 | 一级做a爰片久久毛片图片 一级做a爰片久久毛片鸭王 | 欧美深深色噜噜狠狠yyy | 波多野结衣福利 | 日韩欧美高清一区 | ww欧美| 男人j桶进女人j的视频 | 日韩欧美亚洲综合久久影院d3 | 最新国产精品视频免费看 | aa黄色片| 久久国产免费观看精品 | 很黄很暴力 很污秽的小说 很黄很黄叫声床戏免费视频 | 国产成人综合欧美精品久久 |