Skip to content
jay.chang edited this page Apr 24, 2019 · 3 revisions

title: Sevenjay's C++ Standard

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

[TOC]

政策

  1. 以更高警告級別進行更乾淨的編譯[C++CS01][^1]

    今天試用 clang 編譯程式, 發覺它有個不錯的選項: -Wglobal-constructors。用這選項編譯, 遇到有 non-local static 物件會依賴其它函式 (包含 constructor) 設值時, 會輸出 warning。

  2. 使用自動化建置系統[C++CS02]

  3. 使用版本控制系統[C++CS03]

[^1]: [C++CS] C++ Coding Standards

編程風格

  1. 避免使用巨集[C++CS16][EC02][^2]
  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]

[^2]: [EC] Effective C++ 3/e

資源與物件設計

  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也一樣必須檢查

[^3]: [MEC] More Effective C++

Coding Style: 統一可讀性