開發(fā)過(guò)項(xiàng)目的工程師都知道,一個(gè)好的項(xiàng)目,代碼基本都有統(tǒng)一的規(guī)范,否則代碼就會(huì)隨著版本迭代,變得越來(lái)越臃腫。
代碼規(guī)范應(yīng)在項(xiàng)目早期建立,這些規(guī)范對(duì)于保持整個(gè)項(xiàng)目的一致性非常有必要,采用一致的規(guī)范可以提高效率并簡(jiǎn)化項(xiàng)目維護(hù)。
采用一致的規(guī)范可以:
- 可移植性
- 一致性
- 整潔
- 維修方便
- 容易理解
- 簡(jiǎn)單
下面來(lái)看看著名的µC/OS代碼的規(guī)范。
一、標(biāo)頭
C源文件的標(biāo)頭如下所示,公司名稱和地址可以在前幾行,后跟一個(gè)標(biāo)題,用于描述文件的內(nèi)容。其中包含版權(quán)聲明,以警告該軟件的專有性等。
二、包含文件
#include包含通常有兩種方式,在源文件中包含所需的頭文件,還有一種把所有頭文件都整理在一個(gè)文件,比如INCLUDES.H。這樣你就不必記住哪個(gè)頭文件與哪個(gè)源文件一起使用,尤其是在添加新模塊時(shí)。唯一的不便是編譯每個(gè)文件需要更長(zhǎng)的時(shí)間。
三、命名標(biāo)識(shí)符
符合ANSI C標(biāo)準(zhǔn)的C編譯器(到目前為止,大多數(shù)C編譯器都這樣做)最多允許32個(gè)字符作為標(biāo)識(shí)符名稱。標(biāo)識(shí)符是變量、結(jié)構(gòu)/聯(lián)合成員、函數(shù)、宏、#defines等。
比如:大寫字符用于分隔標(biāo)識(shí)符中的單詞,功能和下劃線字符(_)類似。
µC/OS命名標(biāo)識(shí)符:
- 函數(shù)聲明中的形式參數(shù)應(yīng)僅包含小寫字符。
- 自動(dòng)變量名稱應(yīng)僅包含小寫字符。
- 靜態(tài)變量和函數(shù)應(yīng)使用文件/模塊名稱(或其一部分)作為前綴,并應(yīng)使用大寫/小寫字符。
- extern變量和函數(shù)應(yīng)使用文件/模塊名稱(或其一部分)作為前綴,并應(yīng)使用大寫/小寫字符。
四、縮略
代碼基本都會(huì)使用縮寫,縮寫不能中英文混合,通常是英文的縮寫,比如OS代表Operating System。
一些常用的縮寫需要統(tǒng)一規(guī)范,一些不常用的縮寫需要在代碼中注釋清除。
µC/OS代碼中使用的縮寫比較多,比如:
五、注釋
// /* */ 是兩種最常見注釋的方法,還有注釋的位置也很關(guān)鍵。通常在代碼所在行上一行,或者在代碼所在行(代碼后面)。
但也有奇葩把代碼注釋在代碼所在行的下一行(通常不建議這么操作)。
µC/OS使用 /**/ 而且都在代碼所在行(后面):
六、#defines
頭文件(.H)和C源文件(.C)可能需要定義常量和宏,常量和宏始終使用大寫字母。
七、數(shù)據(jù)類型
C語(yǔ)言允許你使用typedef關(guān)鍵字創(chuàng)建新的數(shù)據(jù)類型,µC/OS使用大寫字符聲明所有數(shù)據(jù)類型,因此遵循用于常量和宏的相同規(guī)則,永遠(yuǎn)不會(huì)混淆常量,宏和數(shù)據(jù)類型的問(wèn)題。
八、局部變量
一些源模塊要求使用局部變量,通過(guò)使用static關(guān)鍵字,變量可以按字母順序或功能順序列出。
九、縮進(jìn)
縮進(jìn)有使用空格和Tab兩種符號(hào),規(guī)范通常只使用一種,不能空格和Tab兩種混合使用(現(xiàn)在很多編輯器都支持Tab替換成空格的功能)。
如果混合使用,在不同編輯器打開代碼,你就可能會(huì)看到一團(tuán)糟。
µC/OS使用四個(gè)空格:
十、結(jié)構(gòu)體和聯(lián)合體
包含結(jié)構(gòu)體和聯(lián)合體的格式、命名、注釋等這些都需要規(guī)范,µC/OS代碼使用的比較簡(jiǎn)單,也是大眾化的定義:






