C編碼規(guī)范
時間:2016-12-14作者:華清遠(yuǎn)見
為什么需要編碼規(guī)范? 見過 很多C語言的初學(xué)者寫的代碼,他們并不懂什么是好的編碼 風(fēng)格,寫出來的代碼風(fēng)格各異。有的風(fēng)格極易導(dǎo)致錯誤,有的風(fēng)格讓人難以理解,有的風(fēng)格讓人眼花繚亂,有的風(fēng)格甚至連作者自己都不知道寫代碼那會自己到底在想什么。 良好的編碼風(fēng)格,并不是官僚制度下產(chǎn)生的浪費大家時間的制度。統(tǒng)一的編碼風(fēng)格,可以讓別人很容易理解代碼意圖,進(jìn)而快速使用和二次開發(fā),大大節(jié)約開發(fā)時間。并且極大的簡化了代碼維護,減少了維護成本。 良好的編碼風(fēng)格,可以讓程序員避免一些細(xì)節(jié)上的缺失。雖然這些東西可能很細(xì)微,但若你不注意這些細(xì)節(jié),那可能會給整個軟件的質(zhì)量帶來極大的影響,所謂“千里之堤毀于蟻穴”。 很多大公司,例如google,華為,騰訊等,都會在新員工入職培訓(xùn)的階段培訓(xùn)編程標(biāo)準(zhǔn)。每個員工都必須遵循公司內(nèi)部制定的編程標(biāo)準(zhǔn)。程序就像一個作品,有素質(zhì)有修養(yǎng)的程序員的作品必然是一圖精美的圖畫,一首美妙的歌曲,一本賞心悅目的小說。 如何編寫代碼 注釋 注釋是源碼中非常重要的部分,通常源程序中的注釋量必須在15%~20%以上。注釋的原則是有助于程序的閱讀和理解。所以注釋語言必須準(zhǔn)確,易懂,簡潔。注釋不宜過多,也不宜太少。 文件或者模塊的注釋 對于一個文件或模塊注釋,應(yīng)該有文件名稱,生成日期,作者名字,模塊描述,版本編號,修改記錄等。例如: /**************************************** 2.函數(shù)的注釋 對于函數(shù),我們需要標(biāo)注的內(nèi)容主要是:函數(shù)名稱,參數(shù)說明,功能描述,返回值說明等。例如: /*************************************************** 3.其他的注釋 i. 邊寫代碼邊注釋,對于具有一定含義的變量、常量、數(shù)據(jù)結(jié)構(gòu)以及相關(guān)算法,若其名稱不能充分說明其用途或需要添加額外的說明,都必須進(jìn)行注釋。 ii. 注釋一般位于需要注釋的語句相鄰的上方或者右方。禁止在代碼的下方寫注釋。 iii. 將注釋與其上面的代碼用空行間隔。 iv. 注釋的格式盡量一致,建議使用/*..........*/ 二、代碼的排版 良好的排版是優(yōu)秀代碼風(fēng)格的關(guān)鍵。以下是代碼排版需要主動的事項。 1.程序塊要采用縮進(jìn)風(fēng)格編寫,縮進(jìn)的空格數(shù)是4個 2.相對獨立的代碼塊之間,變量的說明之后,必須加入空行。 例如: if ( ! is_empty(list))) 3.較長的語句要分成多行書寫。循環(huán)、判斷等語句中若有較長的表達(dá)式或語句,要進(jìn)行適當(dāng)?shù)膭澐帧?/p> 4.不允許把多個短語句寫在一行中,一行只寫一條語句。 例如: rect.length = 0; rect.width = 0; 5.if,for,do,while,case,switch,default等獨占一行,且其中語句部分無論幾行都需要加{}。 6.注意運算符的優(yōu)先級,并用括號明確表達(dá)式的操作順序,避免使用默認(rèn)優(yōu)先級。 三、標(biāo)識符命名 標(biāo)識符的命名要清晰,有明確含義。使用完整的單詞或大家基本可以理解的縮寫,避免使人產(chǎn)生誤解。 1.常量命名使用大寫 例如 :MAX_VALUE 2.變量命名禁止取單個字符,建議除了要有具體含義外,還能表明存儲類型、數(shù)據(jù)類型等,但是i,j,k作為局部不循環(huán)變量是可以的。 變量命名可以采用匈牙利命名法 ,變量的第一個字母小寫, 表示其數(shù)據(jù)類型,如 int iIndex; char cIndex; 也可以采用linux通用的命名規(guī)范,采用‘_’分割短語命名一個變量,例如一個變量保存圖書數(shù)目,可以命名為 int number_book; 下列所示的局部變量方法可以借鑒: int liv_width; 其解釋如下: l 局部變量(local) 3.標(biāo)示符的風(fēng)格要自始至終保持一致,不可來回變換。 4.避免不易理解的數(shù)字,要用有意義的宏來代替。例如: #define MAX 128 四、宏 1.用宏定義表達(dá)式的時候,要使用完備的括號。例如: #define MAX(a,b) a > b ? a : b 2.使用宏的時候,不允許參數(shù)發(fā)生變化。例如: 如下用法會產(chǎn)生錯誤: #define SQUARE(a) ((a) * (a)) 3.將常量聲明為宏,防止代碼中的硬編碼。 比如:int user[100]; 誰也不知道100到底表示什么含義,你可以定義一個宏來表示其含義,比如大用戶數(shù)量MAX_USER。若程序中突然出現(xiàn)for(i = 0;i < 100;i++)這樣的代碼,你或許根本不知道100表示什么含義。再或者你要改變這個值,100出現(xiàn)幾次就需要修改幾個位置 ,這就是硬編碼帶來的后果。 4.頭文件中的預(yù)編譯 當(dāng)多個文件同時包含一個頭文件的時候,#ifndef是個很關(guān) 鍵的東西。它能避免重復(fù)包含頭文件所帶來的命名沖突。 一般的格式如下: 在/fad/cde.h文件中 #ifndef FAD_CDE_H 五、函數(shù) 1.對于所調(diào)用的函數(shù)的錯誤返回碼,要進(jìn)行仔細(xì),全面的處理。 2.函數(shù)的規(guī)模盡量限制在200行以內(nèi)。 3.一個函數(shù)僅完成一件事情,多功能的函數(shù),可能會使函數(shù)的理解、測試、維護變得困難。 4.檢查所有參數(shù)輸入的有效性,可以使用斷言。 六、頭文件和源文件 一般來說,頭文件中是聲明,源文件中是定義。源文件要編譯成庫文件,若別人要使用你的函數(shù),就要引用你的頭文件,所以頭文件一般是變量、宏定義、枚舉、結(jié)構(gòu)和函數(shù)接口的聲明,源文件則是實現(xiàn)的細(xì)節(jié)。 頭文件和源文件大的用處就是聲明和實現(xiàn)分開。直接把函數(shù)實現(xiàn)寫到頭文件中是很不好的習(xí)慣。
相關(guān)資訊
發(fā)表評論
|