Sevenjay's C++ Standard

From Sevenjay's Wiki

Jump to: navigation, search

一個團隊的編程標準是非常重要的,以下是我整理歸納的Coding Standard,並不只適用於c++,關於原因並不多做說明。 Coding Standard是必須遵守的

Contents

政策[註 1]

  1. 以更高警告級別進行更乾淨的編譯[C++CS01][1]
  2. 使用自動化建置系統[C++CS02]
  3. 使用版本控制系統[C++CS03]

編程風格

  1. 避免使用巨集[C++CS16][EC02]
  2. 避免魔術[註 1][C++CS17]
  3. 宣告變數時儘可能鄰近其使用點[註 1][C++CS18][EC26]
  4. 總是將變數初始化[註 1][C++CS19][EC04][2]
    實踐方法:每個變數同時宣告又初始化會顯得很繁瑣,又很難在初始化前判斷有無使用到。故限制宣告後在10行以外才初始化的變數,必須宣告時初始化
  5. 相容於c程式時,請使用安全的函式,如strncpy取代strcpy。
  6. 宣告指標(raw pointer)時,若未立即初始化,務必初始化為NULL。{相關:錯誤處理和異常6}
  7. 傳遞不變物件時以pass-by-reference-to-const取代pass-by-value[EC20]

資源與物件設計

  1. 盡量不要使用new。相同形式成對使用new和delete[EC16]。
  2. 務必為多型基礎類別宣告virtual destructor[EC07][C++CS50]。base class的解構式如果是public,就(才)應該設為virtual。
  3. 可以放在private就不要放到public,且將成員變數皆宣告為private[EC22]。
  4. Multithread: 務必控管同時存取資源情況,以AutoLock物件管理互斥資源
  5. Multithread: 明確地表示出會進入多個thread的程式碼

錯誤處理和異常

  1. 充分使用assert記錄內部假設和不變式[註 1][C++CS68]
  2. write error-safe code[註 1][C++CS71]
  3. 以物件管理資源[註 1][EC13]
  4. 以by value方式拋出異常並以by reference方式捕捉[C++CS73][MEC13][3]
  5. Avoid exception specifications[C++CS75][MEC14]
  6. 使用任何非範圍內宣告的指標,務必檢查是否為NULL,smart pointer也一樣必須檢查

Coding Style: 統一可讀性

註釋:

  1. 1.0 1.1 1.2 1.3 1.4 1.5 1.6 其他程式亦適用

Reference:

  1. [C++CS] C++ Coding Standards
  2. [EC] Effective C++ 3/e
  3. [MEC] More Effective C++
Personal tools