色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

北匯信息POLELINK ? 2024-03-28 13:53 ? 次閱讀

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

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

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

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

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

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

編程中,循環(huán)用于重復(fù)代碼塊。當(dāng)您知道要在代碼塊中循環(huán)多少次時(shí),請(qǐng)使用for循環(huán)。

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

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

傳統(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時(shí),迭代器的使用是隱式的:

for ( auto &&s: v ) {
std::cout << s << “ “;?
}

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

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

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

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

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

  • 一個(gè)輸出用空格分隔的字符串的循環(huán),如上所述
  • 第二個(gè)循環(huán),打印第一個(gè)字符串的字母,用空格分隔:
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í)行此操作,第一個(gè)循環(huán)將按預(yù)期運(yùn)行,但第二個(gè)循環(huán)將調(diào)用未定義的行為。 問題是 createStrings()[0]有兩個(gè)函數(shù)調(diào)用。最里面的調(diào)用是createStrings的調(diào)用 ,最外面的調(diào)用是對(duì)索引運(yùn)算符[]的調(diào)用。

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

返回頁首

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

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

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

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

現(xiàn)在,初始值設(shè)定項(xiàng)中只有一個(gè)函數(shù)調(diào)用,因此生存期擴(kuò)展具有所需的效果,并且行為已完全定義。

請(qǐng)注意,此問題已在 C++23 中得到解決,其中初始值設(shè)定項(xiàng)的所有臨時(shí)項(xiàng)的生存期已擴(kuò)展到整個(gè)for語句。

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

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

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

歡迎聯(lián)系北匯信息,申請(qǐng)Helix QAC試用。

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

    關(guān)注

    180

    文章

    7604

    瀏覽量

    136686
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4779

    瀏覽量

    68521
  • MISRA
    +關(guān)注

    關(guān)注

    0

    文章

    21

    瀏覽量

    6963
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

    C++在嵌入式應(yīng)用中的機(jī)遇與挑戰(zhàn)是什么?

    C++在嵌入式應(yīng)用中的機(jī)遇與挑戰(zhàn)是什么?什么是MISRA C++
    發(fā)表于 04-28 06:25

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

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

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

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

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

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

    C++課程資料詳細(xì)資料合集包括了:面向?qū)ο蟪绦蛟O(shè)計(jì)與C++,算法,函數(shù)等

    循環(huán),多態(tài)性,數(shù)組,模板,習(xí)題,STL編程,預(yù)處理,指針,結(jié)構(gòu)體,位運(yùn)算,文件,常見錯(cuò)誤c++模板使用疑問等
    發(fā)表于 07-09 08:00 ?18次下載
    <b class='flag-5'>C++</b>課程資料詳細(xì)資料合集包括了:面向?qū)ο蟪绦蛟O(shè)計(jì)與<b class='flag-5'>C++</b>,算法,函數(shù)等

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

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

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

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

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

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

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

    Helix QAC 2023.2 提供 100% 的 MISRA C:2012 和 MISRA C2023 規(guī)則覆蓋率,并更新相應(yīng)的合規(guī)性
    的頭像 發(fā)表于 07-31 22:53 ?1181次閱讀
    靜態(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ī)則覆蓋率

    您需要了解的有關(guān)下一個(gè)MISRA?標(biāo)準(zhǔn)的信息:MISRA C++ 2023?簡介

    MISRA C++2023?是廣受期待的MISRA C++ ?標(biāo)準(zhǔn)的下一個(gè)版本,將于今年晚些時(shí)候發(fā)布。新版本將整合AUTOSAR
    的頭像 發(fā)表于 08-25 18:06 ?1315次閱讀
    您需要了解的有關(guān)下一個(gè)<b class='flag-5'>MISRA</b>?標(biāo)準(zhǔn)的信息:<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預(yù)計(jì)將于2023年第四季度發(fā)布的新MISRA C++?指南,將100%覆蓋MISRA C++:
    的頭像 發(fā)表于 11-08 18:37 ?514次閱讀
    靜態(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++2023MISRA? C++ 標(biāo)準(zhǔn)的下一個(gè)版本,來了!為了幫助您做好準(zhǔn)備,我們介紹了 Perforce 首席技術(shù)支持工
    的頭像 發(fā)表于 01-11 09:00 ?581次閱讀
    <b class='flag-5'>C++</b>簡史:<b class='flag-5'>C++</b>是如何開始的

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

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

    whitepaper-perforce-what-is-misra

    如果您熟悉嵌入式軟件的世界,您可能聽說過安全關(guān)鍵系統(tǒng)的MISRA編碼準(zhǔn)則和合規(guī)性。最初為在汽車嵌入式軟件行業(yè),MISRA C for CC++
    發(fā)表于 08-08 15:54 ?0次下載
    主站蜘蛛池模板: 草莓国产视频免费观看| 欧美精品一卡二卡| 37pao成人国产永久免费视频| 久久全国免费久久青青小草| 亚洲精品一区国产欧美| 国产偷国产偷亚州清高APP| 最新高清无码专区| 午夜福利自怕| 久久操韩国自偷拍| 拔萝卜视频免费看高清| 色综合a在线| 精品 在线 视频 亚洲| 97国产露脸精品国产麻豆| 人妻中文字幕乱人伦在线| 国产线精品视频在线观看| 777琪琪午夜理论电影网| 日本漫画无彩翼漫画| 國産麻豆AVMDMD0179| 99re2.久久热最新地址| 亚洲AV精品无码喷水直播间| 欧美精品久久久久久久久大尺度 | 99精品视频在线观看免费播放| 色偷偷男人天堂| 国产人在线成免费视频| 无码国产伦一区二区三区视频| 久久久精品成人免费看| 国产小视频国产精品| 美女PK精子小游戏| 高干紧射H后入| 99久久久精品免费观看国产| 亚洲色婷婷久久精品AV蜜桃| 色老板影视| 青青草原伊人| 免费国产足恋网站| 久久视频在线视频| 国产在线精品一区二区在线看| 丰满大爆乳波霸奶| www.精品视频| 97视频免费在线| 中文字幕午夜乱理片| 一本色道久久综合亚洲精品蜜桃冫 |