1. gzyueqian
      18529173453

      嵌入式開發(fā):提示和技巧——C 語(yǔ)言中要避免的8個(gè)保留字

      更新時(shí)間: 2022-08-08 09:40:45來(lái)源: 粵嵌教育瀏覽量:7796

        僅僅因?yàn)橐粋€(gè)特性是用他們選擇的語(yǔ)言提供給程序員的,并不意味著他們應(yīng)該使用它!在使用C開發(fā)嵌入式軟件時(shí)尤其如此。雖然C為嵌入式開發(fā)人員提供了大量不可或缺的工具,但有8個(gè)內(nèi)置于語(yǔ)言中的關(guān)鍵字應(yīng)該完全避免或僅作為最后手段使用。讓我們簡(jiǎn)單探討一下這些保留關(guān)鍵字,并理解為什么我們應(yīng)該盡量減少它們的使用。

        保留關(guān)鍵字1——auto

        auto關(guān)鍵字是一個(gè)存儲(chǔ)類說(shuō)明符,它告訴編譯器正在定義的變量的存儲(chǔ)持續(xù)時(shí)間(范圍)。唯一可以使用該關(guān)鍵字的地方是在函數(shù)中聲明一個(gè)變量,該變量在函數(shù)中創(chuàng)建,然后在函數(shù)完成時(shí)銷毀。因?yàn)檫@在ANSI-C中默認(rèn)發(fā)生在函數(shù)的局部變量上,所以使用這個(gè)關(guān)鍵字是沒(méi)有用的!使用它只會(huì)讓開發(fā)人員感到困惑,因此應(yīng)該避免。

        保留關(guān)鍵字2——break

        break關(guān)鍵字最常用于switch塊的case語(yǔ)句中。這是break語(yǔ)句的完全有效和最好的用法!不幸的是,break也可以用來(lái)提前退出循環(huán)。這可能是break的有效用法,但是如果循環(huán)變得嵌套和復(fù)雜,就會(huì)有危險(xiǎn)。問(wèn)題變成了使用break可能會(huì)產(chǎn)生意想不到的后果,中斷和不執(zhí)行本來(lái)應(yīng)該運(yùn)行的代碼。基本上,break在這種情況下所做的是繞過(guò)循環(huán)的原始終止表達(dá)式。因此,建議僅將break與switch/case語(yǔ)句一起使用,并在循環(huán)中使用其他結(jié)構(gòu)來(lái)獲得所需的行為。

        保留關(guān)鍵字3——continue

        continue關(guān)鍵字與break和goto語(yǔ)句有很多相同的缺點(diǎn),因?yàn)樗袛嗔舜a流,可能會(huì)讓嵌入式開發(fā)人員感到困惑。正在修改代碼的迷茫程序員,通常會(huì)不小心添加bug!continue語(yǔ)句通過(guò)強(qiáng)制執(zhí)行控制直接轉(zhuǎn)到循環(huán)的測(cè)試條件來(lái)繞過(guò)循環(huán)的正常執(zhí)行。使用continue的唯一有用的地方是發(fā)生錯(cuò)誤時(shí),程序員希望語(yǔ)句序列重新開始。

        保留關(guān)鍵字4——extern

        眾所周知,extern關(guān)鍵字只需要很少的介紹,因?yàn)槟J(rèn)情況下,C中的所有內(nèi)容都是隱式extern!extern的問(wèn)題是它讓一切都全球化了!這是一種糟糕的編程實(shí)踐,因?yàn)樗试S每個(gè)函數(shù)和變量看到其他人,這不僅會(huì)導(dǎo)致可重入性問(wèn)題,還會(huì)允許不相關(guān)的函數(shù)意外地修改數(shù)據(jù)。應(yīng)該盡量減少使用extern,將變量定義為具有最小的范圍,并盡可能多地采用封裝等做法。

        

        保留關(guān)鍵字5——goto

        goto關(guān)鍵字是許多電氣工程師轉(zhuǎn)軟件工程師的舊時(shí)代最愛。回到函數(shù)式編程的時(shí)代,主要的控制結(jié)構(gòu)是goto關(guān)鍵字。該關(guān)鍵字允許程序執(zhí)行跳轉(zhuǎn)到程序中的指定標(biāo)簽。goto的問(wèn)題是它的使用通常會(huì)產(chǎn)生讓嵌入式開發(fā)人員難以閱讀的代碼!函數(shù)和其他流控制語(yǔ)句的使用有助于更好的軟件實(shí)現(xiàn)。雖然通常建議永遠(yuǎn)不要使用goto,但它唯一有意義的地方是在函數(shù)范圍內(nèi)的錯(cuò)誤處理程序中使用。

        保留關(guān)鍵字6——inline

        inline關(guān)鍵字實(shí)際上很酷。你可以將它添加到一個(gè)函數(shù)的前面(假設(shè)你使用的是C99編譯器),而不是將該函數(shù)作為編譯代碼中的一個(gè)函數(shù)來(lái)調(diào)用,而是將該函數(shù)的內(nèi)容粘貼到位!這意味著,不需要花費(fèi)時(shí)間去調(diào)用一個(gè)函數(shù),就像函數(shù)代碼是在那里寫的一樣!這有兩個(gè)主要問(wèn)題。第一個(gè)是由編譯器決定它是否實(shí)際內(nèi)聯(lián)代碼!將關(guān)鍵字放在函數(shù)前面并不能保證編譯器會(huì)聽從開發(fā)人員的建議。其次,如果編譯器確實(shí)內(nèi)聯(lián)了函數(shù),如果函數(shù)在整個(gè)代碼中被頻繁使用,那么編譯后的代碼的大小可能會(huì)失去控制!

        保留關(guān)鍵字7——restrict

        restrict關(guān)鍵字是一個(gè)僅適用于指針的類型限定符。它是在C99中引入的,允許編譯器對(duì)代碼執(zhí)行優(yōu)化,前提是被指向的對(duì)象只能通過(guò)受限指針訪問(wèn)。不建議使用restrict,因?yàn)樗赡軙?huì)產(chǎn)生意想不到的副作用。

        保留關(guān)鍵字8——register

        register關(guān)鍵字是開發(fā)人員應(yīng)該避免的另一個(gè)存儲(chǔ)類說(shuō)明符。這個(gè)關(guān)鍵字的意思是向編譯器建議,應(yīng)該通過(guò)使用一個(gè)CPU寄存器來(lái)使對(duì)象快速可用。這個(gè)關(guān)鍵字的一個(gè)問(wèn)題是,一旦獲得,它是否會(huì)遵從建議或者是否會(huì)與其他自動(dòng)變量一起存儲(chǔ)在堆棧中取決于編譯器。今天的編譯器非常聰明,知道存儲(chǔ)對(duì)象和數(shù)據(jù)的最佳位置,因此最好讓編譯器來(lái)決定,而不是再次讓可能正在閱讀代碼并做出錯(cuò)誤假設(shè)的嵌入式開發(fā)人員感到困惑。

      免費(fèi)預(yù)約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 亚洲精品国产官网 | 亚洲日韩欧美少妇精品 | 婷婷色高清在线观看 | 色8欧美日韩国产无线码 | 亚洲人成色777777在线观看 | 日韩二区三区久久久 |