文件組織
- 頭文件:
.h (C++ 建議 .hpp) — 類/結構/聯合聲明、枚舉、#define/constexpr、typedef/using。
- 實現文件:
.cpp (Windows) / .cc (Unix) — 函數/方法定義。
- 文件頁眉:版權、作者、日期、模組說明、版本歷史、專案歸屬。
符號標準讀音 (團隊溝通統一)
| 符號 | 標準名 | 別名 |
| { } | brace / curly brace | 花括號 |
| ( ) | parenthesis / paren | 圓括號 |
| [ ] | bracket | 方括號 |
| . | dot / period | 點 |
| -> | arrow | 箭頭 |
| :: | scope resolution | 作用域解析 / 雙冒號 |
| * | asterisk / star / pointer | 星號 / 指針 |
| & | ampersand / reference / address-of | 引用 / 取址 |
| ~ | tilde | 按位取反 / 析構函數前綴 |
| # | pound / hash | 井號 / 預處理指令 |
命名約定
| 實體 | 風格 | 範例 | 備註 |
| 變量/函數參數 | lowerCamelCase | userName, maxCount | 前綴可選 (m_ 成員, g_ 全局, s_ 靜態) |
| 類/結構/枚舉/類型別名 | UpperCamelCase | UserAccount, ErrorCode | |
| 成員函數 | lowerCamelCase | getUserName() | |
| 常量/宏/枚舉值 | UPPER_SNAKE_CASE | MAX_BUFFER_SIZE, RED | |
| 命名空間 | lower_snake_case | network::http | 短小、有意義 |
| 模板參數 | UpperCamelCase 或單大寫字母 | typename T, class Allocator | |
| 文件名 | lower_snake_case | user_account.cpp | Windows 不區分大小寫,統一小寫 |
排版與空白規則
- 縮進:4 空格 (禁用 Tab);左大括號換行或行尾 (團隊統一),右大括號獨佔行並與對應關鍵字對齊。
- 控制結構:
if/while/for 後無大括號時,下一行縮進 2 空格 (不推薦省略大括號)。
- 標籤/訪問聲明:
public:、case 1: 反向縮進 2 空格 (相對類/函數體)。
- 運算符前後:二元運算符左右各 1 空格 (如
a + b);一元運算符緊貼操作數 (!flag, ++i)。
- 指針/引用聲明:
T* p / T& r (星號/號貼近類型);表達式中 *p 星號前 1 空格。
- 括號內:
( 後、) 前不加空格;if (cond)。
- 行長:建議 ≤ 100/120 字符,超過換行縮進 8 空格 (兩級)。
自成檔代碼原則
- **零魔數**:除 0/1 外,所有字面值常量提取為
constexpr/enum class,賦予語義名稱。
- **完整拼寫**:變量/函數名不縮寫 (如
calculateTotalPrice 而非 calcTotPrc),除非領域通用縮寫 (HTTP, URL, ID, XML)。
- **契約式註釋**:函數頭標註
// Pre: ... Post: ... 或 Doxygen @pre @post @param @return。
- **斷言文檼化**:
assert(ptr != nullptr); 即是最佳註釋。
- **TODO/FIXME 標準化**:
// TODO(author): description,IDE 可追蹤。
現代 C++ 風格補充 (C++11/14/17/20)
| 舊式 | 現代替代 | 理由 |
#define N 100 | constexpr int N = 100; | 作用域、類型安全、調試可見 |
typedef int (*Fn)(int); | using Fn = int(int); | 可讀、支援模板別名 |
enum { RED, BLUE }; | enum class Color { Red, Blue }; | 強類型、無隱式轉換、作用域隔離 |
| 裸指針擁有權 | std::unique_ptr/shared_ptr | RAII、無洩漏、語義明確 |
NULL/0 | nullptr | 類型安全、避免重載歧義 |
| 手寫迴圈 | 範圍 for / 算法 std::transform | 意圖清晰、少出錯、可並行化 |
工具落地
- **格式化**:
clang-format (配置 .clang-format 統一團隊風格),CI 強制檢查。
- **靜態分析**:
clang-tidy, Cppcheck, PVS-Studio,編譯期捕獲風格/邏輯問題。
- **代碼審查清單**:包含命名、排版、魔數、智能指針、const 正確性、異常安全、測試覆蓋。
總結
風格指南非束縛,而是**降低認知負荷、消除歧義、啟用工具鏈自動化**的契約。團隊共識 > 個人偏好;一致性 > 完美性;工具強制 > 人工檢查。
- 上一篇文章: UTF-8 與 GB2312 高效互轉:位運算替代字串操作,修復記憶體洩漏
- 下一篇文章: Managed C++ 中刪除托管物件與封裝原生庫實戰
Copyright ©
程式碼之家 All Rights Reserved