色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美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)不再提示

關(guān)于 函數(shù)體內(nèi)局部變量定義的位置

黃工的嵌入式技術(shù)圈 ? 來(lái)源:網(wǎng)站整理 ? 2020-03-14 11:43 ? 次閱讀

前面有小伙伴問(wèn)了這樣一個(gè)問(wèn)題:

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

我一看代碼,基本上判斷問(wèn)題大概出在什么位置。經(jīng)過(guò)進(jìn)一步分析得出錯(cuò)誤原因:就是函數(shù)里面局部變量定義的位置不對(duì)導(dǎo)致的錯(cuò)誤。

針對(duì)上面的問(wèn)題,這個(gè)問(wèn)題大家可能在實(shí)際項(xiàng)目中不常見,但牽涉的知識(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);

}

}

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

上面這段代碼C編譯器編譯會(huì)錯(cuò)嗎?

答案:按照C89標(biāo)準(zhǔn)編譯就會(huì)出錯(cuò);按照C99標(biāo)準(zhǔn)編譯就不會(huì)出錯(cuò)。

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

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

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

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

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

void Test(void)

{

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

{

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

}

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

}

MDK-ARM和EWARM中C99的配置

文章開篇說(shuō)的問(wèn)題,就是出在IDE的配置上。EWARM工程默認(rèn)是支持C99標(biāo)準(zhǔn)的,而MDK-ARM工程默認(rèn)是不支持C99標(biāo)準(zhǔn)的。所以說(shuō),將一個(gè)支持C99的標(biāo)準(zhǔn)的代碼拷貝到不支持C99標(biāo)準(zhǔn)的環(huán)境中,編譯就會(huì)因?yàn)榇a而出錯(cuò)。

MDK-ARM和EWARM只需要修改一下配置就可以支持C99標(biāo)準(zhǔn),詳情見下面:

1.MDK-ARM的配置

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

2.EWARM的配置

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

關(guān)于變量定義的位置也有很多爭(zhēng)議:有的人說(shuō)為了兼容C89標(biāo)準(zhǔn),都統(tǒng)一寫在可執(zhí)行語(yǔ)句前面;有的人則喜歡后面C99標(biāo)準(zhǔn)規(guī)定的,這種比較隨性,隨定隨用。我也沒(méi)有什么好的建議,看個(gè)人吧。

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

    關(guān)注

    6

    文章

    360

    瀏覽量

    41722
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1623

    瀏覽量

    49108
  • MDK
    MDK
    +關(guān)注

    關(guān)注

    4

    文章

    209

    瀏覽量

    32063
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    XC8編譯器調(diào)用函數(shù)后局域變量值被改變是哪里出了問(wèn)題?

    最近發(fā)現(xiàn)個(gè)問(wèn)題,有個(gè)函數(shù)里邊調(diào)用別的函數(shù)后老出錯(cuò),查找程序沒(méi)有問(wèn)題,經(jīng)過(guò)仿真后發(fā)現(xiàn)在調(diào)用一個(gè)子函數(shù)后有幾個(gè)局部變量值會(huì)發(fā)生改變,再分析原因,發(fā)現(xiàn)本
    發(fā)表于 07-26 07:36

    XC8調(diào)用函數(shù)后局域變量值被改變是怎么回事呀!

    最近發(fā)現(xiàn)個(gè)問(wèn)題,有個(gè)函數(shù)里邊調(diào)用別的函數(shù)后老出錯(cuò),查找程序沒(méi)有問(wèn)題,經(jīng)過(guò)仿真后發(fā)現(xiàn)在調(diào)用一個(gè)子函數(shù)后有幾個(gè)局部變量值會(huì)發(fā)生改變,再分析原因,發(fā)現(xiàn)本
    發(fā)表于 04-30 15:33

    請(qǐng)問(wèn)頭文件能不能定義變量呢?

    最近在編譯一個(gè)工程的時(shí)候,突然遇到了變量重復(fù)定義的問(wèn)題,根據(jù)提示打開這幾個(gè) C 文件,并沒(méi)有發(fā)現(xiàn)定義變量的地方。后來(lái)再找一找,原來(lái)變量
    的頭像 發(fā)表于 04-28 09:33 ?1143次閱讀

    如何定義多個(gè)變量從指定的位置開始存放?

    請(qǐng)教大家一個(gè)問(wèn)題{:3:} 如下面的3個(gè)變量這樣定義: u8V1 __attribute__((at(0x20004000))); u16 V2 __attribute__
    發(fā)表于 04-17 06:50

    深度長(zhǎng)文:STM32 單片機(jī)如何實(shí)現(xiàn)軟件控制硬件

    了 test_tmp3。 沒(méi)找到test_tmp1/test_tmp2,為什么呢?在定義時(shí),test_tmp3 增加了 static 定義,意思就是靜態(tài)局部變量,功能上,相當(dāng)于全局變量
    發(fā)表于 03-20 14:35

    PHP用戶定義函數(shù)詳細(xì)講解

    還可以根據(jù)需要定義函數(shù)。這些稱為“用戶定義函數(shù)”。 ? 句法: function function-name() ?{ ? ? statement 1 : ? ? statement
    的頭像 發(fā)表于 03-20 14:27 ?392次閱讀

    局部變量超出堆棧范圍,想把占用內(nèi)存多的變量申請(qǐng)?jiān)谌秩绾巫觯?/a>

    目前局部變量超出堆棧范圍,現(xiàn)在想把占用內(nèi)存多的變量申請(qǐng)?jiān)谌?,如何?/div>
    發(fā)表于 03-20 08:03

    C程序中可用的存儲(chǔ)類有哪些?

    register 存儲(chǔ)類用于定義存儲(chǔ)在寄存器中而不是 RAM 中的局部變量。這意味著變量的最大尺寸等于寄存器的大?。ㄍǔJ且粋€(gè)詞),且不能對(duì)它應(yīng)用一元的 '&' 運(yùn)算符(因?yàn)樗鼪](méi)有內(nèi)存
    發(fā)表于 03-15 12:32 ?372次閱讀

    為什么stm32cubeide經(jīng)常按住Ctrl+點(diǎn)擊函數(shù)變量無(wú)法跳轉(zhuǎn)到對(duì)應(yīng)函數(shù)變量定義

    為什么stm32cubeide經(jīng)常按住Ctrl+點(diǎn)擊函數(shù)變量無(wú)法跳轉(zhuǎn)到對(duì)應(yīng)函數(shù)變量定義。只能用全局搜索去找
    發(fā)表于 03-13 07:59

    C語(yǔ)言中的三種形式變量

    局部變量是在一個(gè)函數(shù)、代碼塊內(nèi)部聲明的變量,只能被該函數(shù)或者代碼塊內(nèi)部應(yīng)用。局部變量函數(shù)之外不
    發(fā)表于 03-11 17:34 ?683次閱讀
    C語(yǔ)言中的三種形式<b class='flag-5'>變量</b>

    淺談C語(yǔ)言中的函數(shù)定義

    如果函數(shù)要使用參數(shù),則必須聲明接受參數(shù)值的變量。這些變量稱為函數(shù)的形式參數(shù)。 形式參數(shù)就像函數(shù)內(nèi)的其他
    發(fā)表于 03-11 10:09 ?375次閱讀

    函數(shù)指針與回調(diào)函數(shù)的應(yīng)用實(shí)例

    通常我們說(shuō)的指針變量是指向一個(gè)整型、字符型或數(shù)組等變量,而函數(shù)指針是指向函數(shù)函數(shù)指針可以像一般
    的頭像 發(fā)表于 03-07 11:13 ?400次閱讀
    <b class='flag-5'>函數(shù)</b>指針與回調(diào)<b class='flag-5'>函數(shù)</b>的應(yīng)用實(shí)例

    在多核單片機(jī)中,靜態(tài)局部變量需要?jiǎng)澐址侄涡畔幔咳绾畏诺?b class='flag-5'>函數(shù)對(duì)應(yīng)核的ram中?

    請(qǐng)問(wèn)在多核單片機(jī)中,靜態(tài)局部變量需要?jiǎng)澐址侄涡畔幔咳绾畏诺?b class='flag-5'>函數(shù)對(duì)應(yīng)核的ram中?
    發(fā)表于 02-06 06:29

    傳遞函數(shù)定義是什么 傳遞函數(shù)的拉氏反變換是什么響應(yīng)

    傳遞函數(shù)定義: 傳遞函數(shù)是一種數(shù)學(xué)工具,用于描述線性時(shí)不變系統(tǒng)(LTI系統(tǒng))的輸入與輸出之間的關(guān)系,通常用H(s)表示。傳遞函數(shù)是Laplace變換的
    的頭像 發(fā)表于 02-01 10:53 ?4368次閱讀

    西門子博途:如何定義PLC變量

    在 TIA Portal 中,可以在程序段中創(chuàng)建用戶程序時(shí)直接創(chuàng)建變量。 以下步驟介紹了如何定義 PLC 變量以及將插入的 LAD 指令與 PLC 變量互連。
    發(fā)表于 12-29 18:10 ?2190次閱讀
    西門子博途:如何<b class='flag-5'>定義</b>PLC<b class='flag-5'>變量</b>
    主站蜘蛛池模板: 久久性色AV亚洲电影无码| 亚洲欧美精品一中文字幕| av亚洲2017色天堂| 久久热最新网站获取3| 亚洲国产精品嫩草影院永久| 粉嫩自拍 偷拍 亚洲| 琪琪婷婷五月色综合久久| 91偷偷久久做嫩草电影院| 久久久免费观看| 一个人在线观看视频| 好湿好滑好硬好爽好深视频| 午夜福到在线2019| 国产传媒在线观看| 色 花 堂 永久 网站| 嘟嘟嘟在线视频免费观看高清中文| 欧美又粗又大AAAA片| 99久久久无码国产精品AAA| 麻豆精品人妻一区二区三区蜜桃| 伊人草久久| 久久精品热只有精品| 伊人久久中文大香线蕉综合| 久久国产精品无码视欧美| 亚洲中文字幕无码一久久区| 黄色天堂网| 一个人在线观看视频免费| 久久精品中文闷骚内射| 伊人AV一区二区三区夜色撩人| 久久精品国产欧美| 在线 无码 中文 强 乱| 就去色一色| 99re久久热在线视频| 欧美久久无码AV麻豆| 爆乳啪啪无码成人二区亚洲欧美| 欧美性猛交AAA片| 超嫩校花被灌醉在线观看| 日产2021免费一二三四区在线| 调教日本美女| 我就去色色| 黑人干肥婆| 在线免费观看亚洲视频| 免费韩伦影院在线观看|