整潔要求:代碼簡單直接、不隱藏設計者的意圖、用乾淨利落的抽象和直截了當的控制語句將功能實現。
代碼的有效組織包括:邏輯層組織和物理層組織兩個方面。邏輯層,主要是把不同功能的函數通過某種聯繫組織起來,主要關注模塊間的接口,也就是模塊的架構。物理層,無論使用什麼樣的目錄或者名字空間等,需要把函數用一種標準的方法組織起來。設計良好的目錄結構、函數名字、文件組織等,這樣可以方便查找。
1、一個函數僅完成一項功能;
說明:如果功能完成過多,會讓使用者難以理解,使用起來不方便。
2、 重複代碼應該儘可能提煉成函數;
說明:重複代碼提煉成函數可以帶來維護成本的降低。
3、 避免函數過長,新增函數不超過50行;
說明:本規則僅對新增函數做要求,對已有函數修改時,建議不增加代碼行。過長的函數往往意味着函數功能不單一,過於複雜;業界普遍認爲一個函數的代碼行不要超過一個屏幕,避免來回翻頁影響閱讀;一般的代碼度量工具建議都對此進行檢查。
4、 避免函數的代碼塊嵌套過深,新增函數的代碼塊嵌套不超過4層;
說明:本規則僅對新增函數做要求,對已有的代碼建議不增加嵌套層次。
函數的代碼塊嵌套深度指的是函數中的代碼控制塊(例如:if、for、while、switch等)之間互相包含的深度。每級嵌套都會增加閱讀代碼時的腦力消耗,因爲需要在腦子裏維護一個“棧”(比如,進入條件語句、進入循環„„)。應該做進一步的功能分解,從而避免使代碼的閱讀者一次記住太多的上下文。
5、廢棄代碼(沒有被調用的函數和變量)要及時清除;
說明:程序中的廢棄代碼不僅佔用額外的空間,而且還常常影響程序的功能與性能,很可能給程序的測試、維護等造成不必要的麻煩。
6、函數不變參數使用const;
說明:不變的值更易於理解/跟蹤和分析,把const作爲默認選項,在編譯時會對其進行檢查,使代碼更牢固/更安全。
7、函數的參數個數不超過5個;
說明:函數的參數過多,會使得該函數易於受外部(其他部分的代碼)變化的影響,從而影響維護工作。函數的參數過多同時也會增大測試的工作量。函數的參數個數不要超過5個,如果超過了建議拆分爲不同函數。
8、在源文件範圍內聲明和定義的所有函數,除非外部可見,否則應該增加static關鍵字;
說明:如果一個函數只是在同一文件中的其他地方調用,那麼就用static聲明。使用static確保只是在聲明它的文件中是可見的,並且避免了和其他文件或庫中的相同標識符發生混淆的可能性。
9、不要省略返回值的類型,如果函數沒有返回值,那麼應聲明爲void類型;
說明:C語言中,凡不加類型說明的函數,一律自動按整型處理。如果不註明類型,容易被誤解爲void類型,產生不必要的麻煩
10、對於有返回值的函數,每一個分支都必須有返回值
說明:爲了保證對被調用函數返回值的判斷,有返回值的函數中的每一個退出點都需要有返回值
11、如果返回值表示函數運行是否正常,規定0爲正常退出,不同非0值標識不同異常退出。避免使用TRUE或FALSE作爲返回值
12、必須對所調用函數的錯誤返回值進行處理
說明:函數返回錯誤,往往是因爲輸入的參數不合法,或者此時系統已經出現了異常。如果不對錯誤返回值進行必要的處理,會導致錯誤的擴大,甚至導致系統的崩潰