亚洲精品久久久久久久久久久,亚洲国产精品一区二区制服,亚洲精品午夜精品,国产成人精品综合在线观看,最近2019中文字幕一页二页

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

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

3天內不再提示

關于 函數(shù)體內局部變量定義的位置

黃工的嵌入式技術圈 ? 來源:網(wǎng)站整理 ? 2020-03-14 11:43 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

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

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

函數(shù)中變量的定義位置

大家先看下代碼中變量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標準編譯就不會出錯。

變量定義位置的區(qū)別

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

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

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

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

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標準的環(huán)境中,編譯就會因為代碼而出錯。

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標準,都統(tǒng)一寫在可執(zhí)行語句前面;有的人則喜歡后面C99標準規(guī)定的,這種比較隨性,隨定隨用。我也沒有什么好的建議,看個人吧。

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

    關注

    6

    文章

    361

    瀏覽量

    43094
  • 編譯器
    +關注

    關注

    1

    文章

    1666

    瀏覽量

    50990
  • MDK
    MDK
    +關注

    關注

    4

    文章

    211

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    關于協(xié)處理器自定義指令的實現(xiàn)

    位置1,在上述鏈接的指令格式中也可見其對應關系: 后面一個6就是對應指令編號了,在31位到25位的地方,不同的指令編號即表示不同的指令,所以每種custom類型都可以定義出128條自定義指令
    發(fā)表于 10-31 06:36

    按照芯來文檔設置可以通過segger IDE debug了,但是沒法看全局或者局部變量值,怎么解決?

    如題,按照芯來文檔設置可以通過segger IDE debug了,但是沒法看全局或者局部變量值,很麻煩。有遇到過解決了的嗎?
    發(fā)表于 10-20 09:20

    如何從主機將數(shù)據(jù)按8bit傳入片上ITCM?

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

    【原創(chuàng)】TDMS設置下一個寫入位置函數(shù)的摸索

    開時,必須啟用緩沖 3、必須先調用“tdms設置下一個寫入位置”再調用高級tdms寫入函數(shù) 4、寫入函數(shù)完成后,必須使用高級tdms關閉,利用刷新是無用的 5、高級tdms打開函數(shù),生
    發(fā)表于 08-11 20:54

    【原創(chuàng)】labview布爾控件機械動作中單擊時轉換和其它值變化的區(qū)別以及實際場景應用

    ”的布爾控件可以創(chuàng)建局部變量存儲狀其態(tài),其它的5種機械動作都不可以創(chuàng)建局部變量。 3、在事件結構中觀察本質區(qū)別: “單擊時轉換“ 觸發(fā)事件后,程序在事件結構中掃描到布爾控件時讀取其狀態(tài),用于其后的流程
    發(fā)表于 07-02 18:05

    如何使用CYW20819和ModusToolbox?在閃存中的固定位置定位變量

    我正在使用 CYW20819 和ModusToolbox?并嘗試在閃存中的固定位置定位變量。 我該怎么做? 我想我需要在鏈接器文件中定義一個部分,然后使用 CY_SECTION 命令來完成。 但
    發(fā)表于 07-02 06:57

    TechWiz LCD 3D應用:局部液晶配向

    我們所說的局部摩擦是指給液晶盒中不同區(qū)域(可自定義區(qū)域)進行不同的液晶配向,所以也可以稱之為局部掩膜、局部配向等。TechWiz LCD 2D和TechWiz LCD 3D都可以對液晶
    發(fā)表于 06-16 08:46

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

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

    Ansible Playbook中的變量使用技巧

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

    詳解RTOS中的Hook函數(shù)

    Hook函數(shù)是RTOS中的一個關鍵特性,通過該函數(shù),用戶可以增強對任務管理的控制,定義系統(tǒng)行為。
    的頭像 發(fā)表于 03-24 16:14 ?732次閱讀

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

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

    TechWiz LCD 3D應用:局部液晶配向

    我們所說的局部摩擦是指給液晶盒中不同區(qū)域(可自定義區(qū)域)進行不同的液晶配向,所以也可以稱之為局部掩膜、局部配向等。TechWiz LCD 2D和TechWiz LCD 3D都可以對液晶
    發(fā)表于 02-08 08:52

    TechWiz LCD 3D應用:局部液晶配向

    我們所說的局部摩擦是指給液晶盒中不同區(qū)域(可自定義區(qū)域)進行不同的液晶配向,所以也可以稱之為局部掩膜、局部配向等。TechWiz LCD 2D和TechWiz LCD 3D都可以對液晶
    發(fā)表于 01-03 08:58

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

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

    圖紙模板中的文本變量

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