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

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

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

3天內不再提示

關于 函數體內局部變量定義的位置

黃工的嵌入式技術圈 ? 來源:網站整理 ? 2020-03-14 11:43 ? 次閱讀

前面有小伙伴問了這樣一個問題:

我將EWIAR中的一個函數拷貝到MDK-ARM中之后,發現編譯出錯了。為什么在EWARM中可以編譯通過,但在MDK-ARM中會出錯呢?

我一看代碼,基本上判斷問題大概出在什么位置。經過進一步分析得出錯誤原因:就是函數里面局部變量定義的位置不對導致的錯誤。

針對上面的問題,這個問題大家可能在實際項目中不常見,但牽涉的知識也有必要向大家分享。

函數中變量的定義位置

大家先看下代碼中變量a、b、c、d定義的位置:

void Test(void)

{

char a;

printf("a = %d\n", a);

char b;

printf("b = %d\n", b);

for(char c = 0;c < 10; c++)

{

char d;

printf("c = %d\n", c);

printf("d = %d\n", d);

}

}

以上變量定義位置,相信很多人都看到過,有些朋友在實際編程中也常這么定義在這些位置。

上面這段代碼C編譯器編譯會錯嗎?

答案:按照C89標準編譯就會出錯;按照C99標準編譯就不會出錯。

變量定義位置的區別

相信很多朋友在大學的時候都學過C和C++,學過C++的朋友都知道,上面那段代碼變量定義的位置是很合理的。

但不知道大家了解過C89和C99的區別,區別的內容還是有很多,針對本文說下定義變量位置的區別。

C89標準是不允許在函數中隨便位置聲明變量,C語言中的變量聲明不能放在任何可執行語句之后,只允許在函數(可執行語句)的開始處。如上一段代碼,需要在【printf("a = %d\n", a);】這條語句之前。

C99及C++放松了限制,允許在函數體內任意位置聲明變量。C99新的標準滿足了在函數體內定義變量立馬就使用的功能。但是,也要注意變量的作用域。如下面代碼,紅色的語句就會出錯。

void Test(void)

{

for(char c = 0; c < 10; c++)

{

printf("c = %d\n", c);

}

printf("c = %d\n", c);

}

MDK-ARM和EWARM中C99的配置

文章開篇說的問題,就是出在IDE的配置上。EWARM工程默認是支持C99標準的,而MDK-ARM工程默認是不支持C99標準的。所以說,將一個支持C99的標準的代碼拷貝到不支持C99標準的環境中,編譯就會因為代碼而出錯。

MDK-ARM和EWARM只需要修改一下配置就可以支持C99標準,詳情見下面:

1.MDK-ARM的配置

Project -> Options for Target -> C/C++ 勾選上“C99 Mode”即可。

2.EWARM的配置

Project -> Options -> C/C++ Compiler -> Language 1 選中上“C99”即可。

關于變量定義的位置也有很多爭議:有的人說為了兼容C89標準,都統一寫在可執行語句前面;有的人則喜歡后面C99標準規定的,這種比較隨性,隨定隨用。我也沒有什么好的建議,看個人吧。

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

    關注

    6

    文章

    361

    瀏覽量

    42332
  • 編譯器
    +關注

    關注

    1

    文章

    1651

    瀏覽量

    49712
  • MDK
    MDK
    +關注

    關注

    4

    文章

    209

    瀏覽量

    32417
收藏 人收藏

    評論

    相關推薦

    【解決方案】變頻電機的局部放電測試

    出,提高電機的質量與安全性。依據IEC標準的兩項局部放電測試,旨在實現多維度的潛在不良檢測,具體內容如下交流局部放電(ACPD)測試符合標準:IEC60270、IEC6
    的頭像 發表于 04-21 09:59 ?83次閱讀
    【解決方案】變頻電機的<b class='flag-5'>局部</b>放電測試

    Ansible Playbook中的變量使用技巧

    在inventory中定義的連接變量(比如ansible_ssh_user);優先級第二。
    的頭像 發表于 04-15 10:26 ?120次閱讀

    關于STM32 CAN通信發送函數HAL_CAN_AddTxMessage()的最后一個參數填0和定義一個變量取地址的問題求解

    問題: 關于STM32 CAN通信 發送函數 HAL_CAN_AddTxMessage()的最后一個參數填0和定義一個變量取地址的問題,如果直接傳0,我實驗發現 STM32F103C8
    發表于 03-11 08:22

    關于中斷知識學習總結筆記

    局部變量等資源。例如,可以在普通函數中隨意定義和使用局部變量,并且在函數內部對全局變量的訪問也
    發表于 11-23 11:23

    圖紙模板中的文本變量

    進行定義。無論是系統內置的變量,還是用戶自定義變量,都以這種方式表述。 系統內置文本變量 以下表格展示系統內置的文本
    的頭像 發表于 11-13 18:21 ?451次閱讀
    圖紙模板中的文本<b class='flag-5'>變量</b>

    SUMIF函數與SUMIFS函數的區別

    : 1. 函數定義 SUMIF函數 :用于對滿足單一條件的單元格求和。其基本語法為 SUMIF(range, criteria, [sum_range]) ,其中: range :應用條件的區域
    的頭像 發表于 10-30 09:51 ?6682次閱讀

    鴻蒙原生應用元服務開發-倉頡基本概念程序結構

    () { println(a) } 在非頂層作用域中不能定義上述自定義類型,但可以定義變量函數,稱之為
    發表于 08-13 10:57

    技術干貨驛站 ▏深入理解C語言:基本數據類型和變量

    語言的知識,為后續的編程學習打下堅實的基礎。1基本數據類型在C語言中,數據類型指的是用于聲明不同類型的變量函數的一個廣泛的系統,用于定義變量的類型,以及在編程過程
    的頭像 發表于 07-26 17:53 ?2479次閱讀
    技術干貨驛站 ▏深入理解C語言:基本數據類型和<b class='flag-5'>變量</b>

    XC8編譯器調用函數后局域變量值被改變是哪里出了問題?

    最近發現個問題,有個函數里邊調用別的函數后老出錯,查找程序沒有問題,經過仿真后發現在調用一個子函數后有幾個局部變量值會發生改變,再分析原因,發現本
    發表于 07-26 07:36

    神經網絡中激活函數定義及類型

    詳細介紹激活函數定義、類型。 激活函數定義和基本功能 2.1 定義 激活函數(Activat
    的頭像 發表于 07-02 10:09 ?1016次閱讀

    如何從主機將數據按8bit傳入片上ITCM?

    需求:如何從主機將數據按8bit傳入片上ITCM 我想在PC端(主機)通過8位IO每個周期傳入8bit數據(一共大概32KB的數據,包括自定義指令和局部變量的數據,由.verilog文件讀出來
    發表于 05-24 07:40

    函數信號發生器的定義、功能及應用

    隨著現代電子技術的飛速發展,電子測試設備在科研、生產、教育等領域的應用越來越廣泛。其中,函數信號發生器作為一種重要的電子測試設備,在電子工程、通信、科研等領域發揮著至關重要的作用。本文將詳細介紹函數信號發生器的定義、分類、功能、
    的頭像 發表于 05-15 14:42 ?2439次閱讀

    XC8調用函數后局域變量值被改變是怎么回事呀!

    最近發現個問題,有個函數里邊調用別的函數后老出錯,查找程序沒有問題,經過仿真后發現在調用一個子函數后有幾個局部變量值會發生改變,再分析原因,發現本
    發表于 04-30 15:33

    請問頭文件能不能定義變量呢?

    最近在編譯一個工程的時候,突然遇到了變量重復定義的問題,根據提示打開這幾個 C 文件,并沒有發現定義變量的地方。后來再找一找,原來變量
    的頭像 發表于 04-28 09:33 ?1497次閱讀

    stm32中斷回調函數改變的變量在while中不變怎么解決?

    關于stm32 中斷回調函數改變的變量在while中不變問題
    發表于 04-26 07:44
    主站蜘蛛池模板: 色五五月五月开 | 色综合久久五月 | hs网站免费 | 日本免费www | 人人成人免费公开视频 | 激情综合婷婷丁香六月花 | 色停停 | 亚洲电影在线看 | 欧美色视频日本片高清在线观看 | 伊人操| 欧美性猛交aa一级 | 天天爽爽| 中文字幕第五页 | 色婷婷六月丁香七月婷婷 | 人人草人人插 | 热久久影院 | 免费成人黄色网址 | 色视频一区二区三区 | 四虎在线影院 | 东莞a级毛片 | 亚洲色图综合图区 | 午夜手机福利 | 又粗又长又色又爽视频 | 成人黄色在线网站 | 91精品国产91久久久久青草 | 欧美tube6最新69 | 一区二区不卡视频在线观看 | 欧美hhh | 五月婷婷网站 | 亚洲aaa视频| 久久88色综合色鬼 | 日韩亚 | 国产婷婷一区二区三区 | 亚洲狠狠婷婷综合久久久图片 | 欧美精品一区视频 | 国产亚洲视频在线 | 日本不卡一区二区三区视频 | 亚洲国产一区二区在线 | 国产黄色一级网站 | 性欧美xxxx| 欧美性猛交xxxxbbbb |