C语言代码风格
C語(yǔ)言代碼風(fēng)格總結(jié)
此文將用到的一些代碼風(fēng)格規(guī)范總結(jié)起來(lái),作為自己以后寫代碼時(shí)的參考。
大體上和Google全球開(kāi)源項(xiàng)目C++風(fēng)格一樣,Google風(fēng)格指南鏈接如下:
Google 開(kāi)源項(xiàng)目C++ 風(fēng)格指南 - 內(nèi)容目錄
(一)命名風(fēng)格
業(yè)界流行的3種命名風(fēng)格分別是大小駝峰式、下劃線式、匈牙利式,首先排除匈牙利式風(fēng)格,個(gè)人比較猶豫的是小駝峰和下劃線式命名,個(gè)人比較喜歡下劃線式命名,一眼就能看出哪些單詞,令人很舒服,像linux這種C語(yǔ)言的終極大項(xiàng)目大部分都是下劃線式命名可見(jiàn)一斑。
而大小駝峰看起來(lái)很簡(jiǎn)略,可是實(shí)際寫代碼的時(shí)候大部分都是比較長(zhǎng)的幾個(gè)單詞組合,導(dǎo)致代碼大部分都是一連串的英文字母,可讀性比較差。有些人可能覺(jué)得可以用單詞縮寫或者縮減單詞這種手段來(lái)減少長(zhǎng)度,但是《代碼整潔之道》說(shuō)的很清楚,這種人寫的代碼只能給自己看,而且時(shí)間成了自己都要想半天縮寫是什么意思!
所以當(dāng)長(zhǎng)度上來(lái)以后我每次看的時(shí)候都要貼到屏幕上去分解單詞,眼睛太累了。然而對(duì)于單片機(jī)來(lái)說(shuō),實(shí)測(cè)發(fā)現(xiàn)用下劃線比大小駝峰多出很多內(nèi)存消耗!
目前為了代碼可讀性暫時(shí)選用了下劃線式的,畢竟《重構(gòu)》有句話說(shuō)的好,代碼是寫給人的,不是寫給機(jī)器的!內(nèi)存不足的時(shí)候再說(shuō)吧!
1 變量命名:
全局變量、普通變量、結(jié)構(gòu)體變量、臨時(shí)變量統(tǒng)一采用小寫單詞加下劃線式的命名格式,如this_is_name
補(bǔ)充規(guī)則:
ps:全局變量以后的項(xiàng)目可以參考《華為C語(yǔ)言規(guī)范》在前面加前綴
g_xxxx (global)
2 函數(shù)命名
函數(shù)命名的時(shí)候,首先加模塊名,然后動(dòng)詞在前面,名詞在后面,統(tǒng)一小寫單詞加下劃線。另外根據(jù)《代碼整潔之道》函數(shù)粒度要足夠細(xì),一個(gè)函數(shù)只允許做一件事,參數(shù)要足夠少,命名要意思表達(dá)準(zhǔn)確,比如函數(shù)從外部拿數(shù)據(jù)的時(shí)候buf地址形參命名為source,函數(shù)將數(shù)據(jù)傳遞到外面的時(shí)候buf地址形參命名為destin。
另:
如果只是返回BOOL型的函數(shù)在函數(shù)名最前面加前綴is_xxxx,代表只返回TRUE or FALSE。
3 類型命名
結(jié)構(gòu)體、聯(lián)合體、枚舉等命名的時(shí)候?yàn)榱撕妥兞繀^(qū)分開(kāi)來(lái),統(tǒng)一采用大駝峰式命名法則,結(jié)構(gòu)體變量依舊是下劃線式。而枚舉內(nèi)的變量統(tǒng)一全部大寫。
4 宏定義命名
數(shù)字型的宏定義統(tǒng)一大寫,函數(shù)型的宏定義和普通函數(shù)一樣的命名法則。
(二)程序風(fēng)格
1 內(nèi)聯(lián)函數(shù)
當(dāng)函數(shù)只有 10 行甚至更少時(shí)將其定義為內(nèi)聯(lián)函數(shù).
內(nèi)聯(lián)函數(shù)可以令目標(biāo)代碼更加高效. 對(duì)于存取函數(shù)以及其它函數(shù)體比較短, 性能關(guān)鍵的函數(shù), 鼓勵(lì)使用內(nèi)聯(lián).
但濫用內(nèi)聯(lián)將導(dǎo)致程序變得更慢. 內(nèi)聯(lián)可能使目標(biāo)代碼量或增或減, 這取決于內(nèi)聯(lián)函數(shù)的大小. 內(nèi)聯(lián)非常短小的存取函數(shù)通常會(huì)減少代碼大小, 但內(nèi)聯(lián)一個(gè)相當(dāng)大的函數(shù)將戲劇性的增加代碼大小. 現(xiàn)代處理器由于更好的利用了指令緩存, 小巧的代碼往往執(zhí)行更快。
所以,一個(gè)較為合理的經(jīng)驗(yàn)準(zhǔn)則是, 不要內(nèi)聯(lián)超過(guò) 10 行的函數(shù).。
另一個(gè)實(shí)用的經(jīng)驗(yàn)準(zhǔn)則: 內(nèi)聯(lián)那些包含循環(huán)或 switch 語(yǔ)句的函數(shù)常常是得不償失 (除非在大多數(shù)情況下, 這些循環(huán)或 switch 語(yǔ)句從不被執(zhí)行)。
2 #include 的路徑及順序
使用標(biāo)準(zhǔn)的頭文件包含順序可增強(qiáng)可讀性, 避免隱藏依賴。
順序:所依賴的頭文件,C 庫(kù),其他庫(kù)的 .h,本項(xiàng)目?jī)?nèi)的 .h。
…待補(bǔ)充…
總結(jié)
- 上一篇: ARM芯片选型的一些建议
- 下一篇: JPA二:FindBy和JPQL