18video性欧美19sex,欧美高清videosddfsexhd,性少妇videosexfreexxx片中国,激情五月激情综合五月看花,亚洲人成网77777色在线播放

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

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

3天內不再提示

使用 MISRA C++:2023? 避免基于范圍的 for 循環(huán)中的錯誤

北匯信息POLELINK ? 2024-03-28 13:53 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

MISRA C++:2023?,MISRAC++標準的下一個版本,就在這里!為了幫助您了解MISRA C++:2023與上一版本之間的變化,我們繼續(xù)Perforce首席技術支持工程師Frank van den Beuken博士撰寫的第三期博客系列。

在前兩篇博客中,我們向您介紹了新的 MISRA C++ 標準和C++ 的歷史。在這篇博客中,我們將仔細研究以 C++ 中for循環(huán)為中心的特定規(guī)則。

什么是 MISRA C++:2023Rule9.5.2,為什么它很重要?

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

為了理解為什么會發(fā)生這種情況,讓我們仔細看看基于 C++ 范圍的for循環(huán)。

什么是 C++ 中基于范圍的for循環(huán)?

編程中,循環(huán)用于重復代碼塊。當您知道要在代碼塊中循環(huán)多少次時,請使用for循環(huán)。

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

傳統(tǒng)循環(huán)源自 C 語言,具有可選的循環(huán)初始化,然后是循環(huán)條件,最后是循環(huán)增量表達式。

傳統(tǒng)for循環(huán)可用于迭代容器,如下所示:

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

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

{
auto && __range = v;
auto __begin = __range;
auto __end = v.end();

for (; __begin != __end; ++__begin) {
auto &&s = *__begin;
std::cout << s << “ “;?
}
}

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

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

  • 一個輸出用空格分隔的字符串的循環(huán),如上所述
  • 第二個循環(huán),打印第一個字符串的字母,用空格分隔:
std::vector createStrings() {
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;?
}

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

未定義行為的原因是 “ createStrings ”返回的臨時對象 用作“ operator[ ]”調用的參數,因此,根據C++的規(guī)則,臨時對象的生存期不會延長。

返回頁首

MISRA C++:2023Rule9.5.2 如何防范未定義的行為

MISRA C++:2023Rule9.5.2 旨在防止這種情況。MISRA C++:2023引入了規(guī)則9.5.2,該規(guī)則 要求for范圍初始值設定項最多應包含一個函數調用。

它還建議通過在循環(huán)范圍之前的單獨聲明中執(zhí)行內部函數調用來解決此問題。例如:

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

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

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

使用 Helix QAC 執(zhí)行MISRA C++:2023規(guī)則

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

Helix QAC 通過其標準合規(guī)性模塊為MISRA C++:2023規(guī)則提供100%的強制執(zhí)行覆蓋率,現已推出。靜態(tài)分析工具查找并報告C和C++中違反MISRA規(guī)則和指令的情況。

歡迎聯系北匯信息,申請Helix QAC試用。

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

    關注

    183

    文章

    7634

    瀏覽量

    144071
  • 代碼
    +關注

    關注

    30

    文章

    4923

    瀏覽量

    72368
  • MISRA
    +關注

    關注

    0

    文章

    22

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    同一事件在不同的循環(huán)中發(fā)生,為什么只要進入別的循環(huán)就會直接動作?怎樣避免?

    本帖最后由 我拿吉他彈棉花 于 2017-5-29 15:10 編輯 比如按鈕就是,一個按鈕在五個不同的循環(huán)中發(fā)生同樣的事件。只要進入另外一個循環(huán)就直接發(fā)生了!怎么避免。點一次就在本循環(huán)
    發(fā)表于 05-02 15:21

    無限循環(huán)中的程序錯誤

    你好,我的節(jié)目剛開始就開始了。我開始初始化,右跳到無限循環(huán)中。氰去甲腎上腺素CysISR(InDebug
    發(fā)表于 08-16 06:57

    C++語言基礎講解視頻do while循環(huán)語句

    C++語言基礎講解視頻do while循環(huán)語句
    發(fā)表于 01-14 15:32 ?5次下載

    C++語言基礎講解視頻while循環(huán)語句

    C++語言基礎講解視頻while循環(huán)語句,喜歡的朋友可以下載來學習。
    發(fā)表于 01-14 15:31 ?3次下載

    軟件編程規(guī)范(MISRA-C)

    MISRA-C是一種汽車制造業(yè)嵌入式C編碼標準。FreeRTOS符合MISRA-C編程規(guī)范,就連大名鼎鼎的uCOS也宣稱基本符合MISRA-C編程規(guī)范。
    發(fā)表于 11-02 18:29 ?27次下載

    C++課程資料詳細資料合集包括了:面向對象程序設計與C++,算法,函數等

    ,循環(huán),多態(tài)性,數組,模板,習題,STL編程,預處理,指針,結構體,位運算,文件,常見錯誤,c++模板使用疑問等
    發(fā)表于 07-09 08:00 ?18次下載
    <b class='flag-5'>C++</b>課程資料詳細資料合集包括了:面向對象程序設計與<b class='flag-5'>C++</b>,算法,函數等

    MISRA C在安全可靠編程中的地位

    MISRA C指南的覆蓋范圍上尤其競爭,因為不可能執(zhí)行MISRA C的所有16個指令和143個規(guī)則(統(tǒng)稱為指南)。
    的頭像 發(fā)表于 11-23 11:55 ?1411次閱讀
    <b class='flag-5'>MISRA</b> <b class='flag-5'>C</b>在安全可靠編程中的地位

    如何將MISRA C2023整合到您的嵌入式開發(fā)流程中

    MISRA C不是編碼風格指南,而是一套規(guī)則和指令,用于最小化或消除已知危險的編碼實踐。鑒于對安全和安保關鍵型系統(tǒng)的這種重要性,AMD4 和 MISRA C
    的頭像 發(fā)表于 05-04 09:58 ?4045次閱讀
    如何將<b class='flag-5'>MISRA</b> <b class='flag-5'>C</b>:<b class='flag-5'>2023</b>整合到您的嵌入式開發(fā)流程中

    西門子博途SCL: FOR:在計數循環(huán)中執(zhí)行

    使用“在計數循環(huán)中執(zhí)行”指令,重復執(zhí)行程序循環(huán),直至運行變量不在指定的取值范圍內。
    的頭像 發(fā)表于 07-18 10:07 ?1.2w次閱讀

    靜態(tài)代碼分析器工具Helix QAC 2023.2: 提供 100% 的 MISRA C:2012 和 MISRA C2023 規(guī)則覆蓋率

    Helix QAC 2023.2 提供 100% 的 MISRA C:2012 和 MISRA C2023 規(guī)則覆蓋率,并更新相應的合規(guī)性
    的頭像 發(fā)表于 07-31 22:53 ?1826次閱讀
    靜態(tài)代碼分析器工具Helix QAC 2023.2: 提供 100% 的 <b class='flag-5'>MISRA</b> <b class='flag-5'>C</b>:2012 和 <b class='flag-5'>MISRA</b> <b class='flag-5'>C</b>:<b class='flag-5'>2023</b> 規(guī)則覆蓋率

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

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

    靜態(tài)代碼分析工具Helix QAC 2023.3:將100%覆蓋MISRA C++:2023?規(guī)則

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

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

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

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

    MISRA C++2023——MISRA? C++ 標準的下一個版本來了!為了幫助您了解 MISRA
    的頭像 發(fā)表于 06-18 12:57 ?964次閱讀

    whitepaper-perforce-what-is-misra

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