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