日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > > 大橙子瘋嵌入式


前言

這篇重點(diǎn)介紹一下代碼編程規(guī)范的擴(kuò)展要求-宏/常量規(guī)范要求

要求

【規(guī)范1】用宏定義表達(dá)式時(shí),要使用完備的括號(hào)

因?yàn)楹曛皇呛?jiǎn)單的代碼替換,不會(huì)像函數(shù)一樣先將參數(shù)計(jì)算后,再傳遞。

// 錯(cuò)誤示例 #define RECTANGLE_AREA(a, b) a * b // RECTANGLE_AREA(1 + 2, 3 + 6) 替換時(shí)為 1 + 2 * 3 + 6, 因?yàn)榉?hào)優(yōu)先級(jí)此時(shí)和想要的結(jié)果完全不同 #define RECTANGLE_AREA(a, b) (a * b) #define RECTANGLE_AREA(a, b) (a) * (b) // 10 / RECTANGLE_AREA(1 + 2, 3 + 6) 替換時(shí)為 10 / (1 + 2) * (3 + 6), 結(jié)果不同 // 正確示例 #define RECTANGLE_AREA(a, b) ((a) * (b)) // RECTANGLE_AREA(1 + 2, 3 + 6) 替換時(shí)為 ((1 + 2) * (3 + 6)), 結(jié)果一致 

【規(guī)范2】將宏所定義的多條表達(dá)式放在大括號(hào)中

若宏定義函數(shù)表達(dá)式,則記得加換行符 \,建議使用do{...}while(0)的方式

#define DOSOMETHING() \
do \
{ \
 fool1(); \
 fool2(); \
}while(0) 

【規(guī)范3】不允許直接使用魔鬼數(shù)字

使用魔鬼數(shù)字的弊端:代碼難以理解;如果一個(gè)有含義的數(shù)字多處使用,一旦需要修改這個(gè)數(shù)值,代價(jià)慘重。

使用明確的物理狀態(tài)或物理意義的名稱能增加信息,并能提供單一的維護(hù)點(diǎn)。

解決途徑:對(duì)于局部使用的唯一含義的魔鬼數(shù)字,可以在代碼周圍增加說明注釋,也可以定義局部const變量,變量命名自注釋。對(duì)于廣泛使用的數(shù)字,必須定義const全局變量/宏;同樣變量/宏命名應(yīng)是自注釋的。0作為一個(gè)特殊的數(shù)字,作為一般默認(rèn)值使用沒有歧義時(shí),不用特別定義

【規(guī)范4】除非必要,應(yīng)盡可能使用函數(shù)代替宏

宏對(duì)比函數(shù),有一些明顯的缺點(diǎn):

  • 宏缺乏類型檢查,不如函數(shù)調(diào)用檢查嚴(yán)格;

  • 宏展開可能會(huì)產(chǎn)生意想不到的副作用,如#define SQUARE(a) (a) * (a)這樣的定義,如果是SQUARE(i++),就會(huì)導(dǎo)致i被加兩次;如果是函數(shù)調(diào)用double square(double a) {return a * a;}則不會(huì)有此副作用;

  • 以宏形式寫的代碼難以調(diào)試難以打斷點(diǎn),不利于定位問題;

  • 宏如果調(diào)用的很多,會(huì)造成代碼空間的浪費(fèi),不如函數(shù)空間效率高。

【規(guī)范5】常量建議使用const定義代替宏

當(dāng)編譯報(bào)錯(cuò)時(shí),只會(huì)顯示常量,不會(huì)顯示宏定義的名字,查找時(shí)很費(fèi)勁(因?yàn)楹晔翘鎿Q,在編譯過程中稱為“預(yù)處理”)
一般情況下在意常量的類型,就使用const,如果是頭文件對(duì)外提供的常量,使用宏定義

【規(guī)范6】宏定義中盡量不使用return、goto、continue、break等改變程序流程的語(yǔ)句

如果在宏定義中使用這些改變流程的語(yǔ)句,很容易引起資源泄漏問題,使用者很難自己察覺。
錯(cuò)誤示例:在某頭文件中定義宏CHECK_AND_RETURN:


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉