-
Notifications
You must be signed in to change notification settings - Fork 0
C++ Standard
jay.chang edited this page Apr 24, 2019
·
3 revisions
一個團隊的編程標準是非常重要的,以下是我整理歸納的Coding Standard,並不只適用於c++,關於原因並不多做說明。 Coding Standard是必須遵守的
[TOC]
-
以更高警告級別進行更乾淨的編譯[C++CS01][^1]
今天試用 clang 編譯程式, 發覺它有個不錯的選項: -Wglobal-constructors。用這選項編譯, 遇到有 non-local static 物件會依賴其它函式 (包含 constructor) 設值時, 會輸出 warning。
-
使用自動化建置系統[C++CS02]
-
使用版本控制系統[C++CS03]
[^1]: [C++CS] C++ Coding Standards
- 避免使用巨集[C++CS16][EC02][^2]
- 避免魔數[註 1][C++CS17]
- 宣告變數時儘可能鄰近其使用點[註 1][C++CS18][EC26]
- 總是將變數初始化[註 1][C++CS19][EC04][2] 實踐方法:每個變數同時宣告又初始化會顯得很繁瑣,又很難在初始化前判斷有無使用到。故限制宣告後在10行以外才初始化的變數,必須宣告時初始化
- 相容於c程式時,請使用安全的函式,如strncpy取代strcpy。
- 宣告指標(raw pointer)時,若未立即初始化,務必初始化為NULL。{相關:錯誤處理和異常6}
- 傳遞不變物件時以pass-by-reference-to-const取代pass-by-value[EC20]
[^2]: [EC] Effective C++ 3/e
- 盡量不要使用new。相同形式成對使用new和delete[EC16]。
- 務必為多型基礎類別宣告virtual destructor[EC07][C++CS50]。base class的解構式如果是public,就(才)應該設為virtual。
- 可以放在private就不要放到public,且將成員變數皆宣告為private[EC22]。
- Multithread: 務必控管同時存取資源情況,以AutoLock物件管理互斥資源
- Multithread: 明確地表示出會進入多個thread的程式碼
- 充分使用assert記錄內部假設和不變式[註 1][C++CS68]
- write error-safe code[註 1][C++CS71]
- 以物件管理資源[註 1][EC13]
- 以by value方式拋出異常並以by reference方式捕捉[C++CS73][MEC13][^3]
- Avoid exception specifications[C++CS75][MEC14]
- 使用任何非範圍內宣告的指標,務必檢查是否為NULL,smart pointer也一樣必須檢查
[^3]: [MEC] More Effective C++