核心原則:簡潔、可讀、可維護
優秀的程式碼不僅能跑通邏輯,更要讓人易讀、易改、易傳承。本規範涵蓋結構、可讀性、正確性、重用性四大維度,助力團隊產出高質量 C++ 代碼。
一、 基礎結構要求
- 單一函數不超過 100 行,邏輯單一、層次清晰;
- 拒絕冗餘代碼,優先複用標準庫與公共組件;
- 嚴控全域變數,優先使用區域變數降低耦合;
- 善用括號消除歧義,防止運算優先級陷阱。
二、 可讀性鐵律
註釋與文檔
- 檔案頭、函數頭、關鍵變數、複雜演算法必須有註釋;
- 註釋與代碼同步維護,佔總行數 20%~33%;
- 縮進統一用 Tab(6 字節),邏輯層次不超 5 層。
程式碼風格
- 空行、空白也是文檔一部分,合理分隔邏輯塊;
- 顯而易見的語句免註釋,減少噪音;
- 常量宏定義全大寫 + 底線,附帶用途說明。
三、 結構化編程鐵律
- 禁用
GOTO、ELSE GOTO、ELSE RETURN;
- 多路分支用
CASE,雙分支用 IF;
- 迴圈單一出口,函數單一返回點;
- 避免條件賦值,邏輯表達式優於條件分支。
四、 正確性與容錯底線
- 所有變數使用前必須初始化;
- 用戶輸入全維度合法性校驗;
- 浮點數絕不直接比較相等(如
10.0 * 0.1 == 1.0 不可靠);
- 外部資源(檔案、印表機等)主動檢測異常;
- 單元測試是開發流程強制環節,未通過不得提交聯調。
五、 可重用性設計
- 獨立功能封裝為公共控件/類,遵循 OO 封裝原則;
- 提供使用範本,降低接入門檻;
- 減少外部依賴,提升模組獨立性。
附錄:C++ 命名規範速查表
變數前綴(匈牙利變體)
| 類型 | 前綴 | 範例 |
| BOOL | b | bEnable |
| char* | ch / sz / str | chText, szAppName |
| 類對象 | c | cMain |
| Handle | h | hWnd |
| int | i / n | iTmp, nCmdShow |
| 指標 | p | pNode |
| DWORD | dw | dwStart |
| 成員變數 | m_ | m_nVal |
| 全域變數 | g_ | g_nMsg |
常見資源 ID 命名
- 選單:
IDM_XX / CM_XX
- 位圖:
IDB_XX
- 對話框:
IDD_XX
- 字串:
IDS_XX
- 圖示:
IDR_XX
函數命名
- 首字母大寫,駝峰式:
UpdateDB_Tfgd()、PrintTrackData()
- 註明來源模組:
// Module: r01/sdw.c
結構體命名
- 類型全大寫 + 底線開頭:
_DBS_DATABASE
- 變數駝峰式:
GdataBase
控件前綴
fm 視窗、cmd 按鈕、cob 下拉框、txt 編輯框、lab 標籤、lst 列表框、grd 網格、scr 滾動條
程式碼審查清單
- 邏輯清晰、避免過度技巧、慎用遞歸;
- 編碼同步設計測試用例;
- 大括號對齊,縮進 4 空格(Tab=4);
- 版本封存後修改舊碼用
/* */ 封存並記錄變更;
- 關鍵區塊與特殊呼叫必註釋意圖。
Delphi / C++Builder 專屬補充
- 視窗類:
WAbout、檔案:FAbout.cpp
- 按鈕:
btnExit、基類標記 Base:WBaseRep
- 遵循匈牙利命名法,名稱必須有業務含義。