前言
本系列第二部分確立 **命名規則** 與 **介面規範**,統一團隊詞彙,消除閱讀歧義,為自動化工具 (靜態分析、重構、文檔生成) 鋪路。
一、變數命名:匈牙利法則 (型別前綴 + 英文語義)
基礎型別前綴表
| 型別 | 前綴 | 範例 |
| bool / BOOL | b | bIsParent |
| BYTE | by | byFlag |
| short / int | n | nStepCount |
| long / LONG | l | lSum |
| char / CHAR | c | cCount |
| float / FLOAT | f | fAvg |
| double / DOUBLE | d | dDelta |
| void / VOID | v | vVariant |
| WORD (unsigned short) | w | wCount |
| DWORD (unsigned long) | dw | dwBroad |
| HANDLE / HINSTANCE | h | hHandle |
| LPCSTR / LPCTSTR | str | strString |
| 以 0 結尾字串 | sz | szFileName |
- 單字首字母大寫 (PascalCase);縮寫全大寫 (如 `nCPUCount`)。
- 非通用變數定義處附註解說明用途。
指標層級前綴
| 層級 | 規則 | 範例 (float*) |
| 一級 | p + 型別前綴 + 名稱 | pfStat |
| 二級 | pp + 型別前綴 + 名稱 | ppfMatrix |
| 三級 | ppp + 型別前綴 + 名稱 | pppfCube |
作用域前綴
| 屬性 | 前綴 | 範例 |
| 全域 | g_ | g_lFailCount |
| 靜態 (檔案/函數靜態) | s_ | s_plPrevInst |
| 類別成員 | m_ | m_lCount |
| 常數 (const/#define) | 全大寫 + 類別前綴 | CM_FILE_NOT_FOUND |
| const 變數 | c_ + 一般命名 | c_szFileName |
使用者定義型別 (UDT)
| 類型 | 標籤前綴 | 範例 |
| struct | S | ScmNPoint { int nX, nY; } |
| union | U | UcmLPoint { long lX, lY; } |
| class | C | CcmFPoint { public: float fPoint; } |
| template class | C + T 前綴 | template<class T> CcmTVector3d { T x,y,z; } |
- 標籤名 **全大寫** (如 `SCM_NPOINT`),內部成員遵循一般變數命名。
- 結構體建議改用 `template class` 保留擴展性。
枚舉命名
enum cmEMDAYS {
EMDAYS_MONDAY,
EMDAYS_TUESDAY,
// ...
};
// 規則:枚舉類型名 + _ + 全大寫值
二、函數命名:動賓結構 + 模組前綴 + 最小長度 8 字元
long cmGetDeviceCount(...); // cm: 通用模組前綴
long vrCreateDevice(...); // vr: 3D/虛擬實境模組
long imgProcessFrame(...); // img: 影像處理模組
- 動詞在前:`Get`/`Set`/`Create`/`Destroy`/`Open`/`Close`/`Read`/`Write`/`Find`/`Calc`/`Convert`...
- 賓語具體:`DeviceCount`/`FileName`/`Matrix`/`Pixel`...
- 避免 `DoIt`/`Handle`/`Process` 等空泛動詞。
三、函數參數規範
- 參數命名遵循變數命名規範。
- **大型結構體傳指標/引用**,避免堆疊拷貝開銷。
- **入口指標參數加 `const`**:`cmCopyString(const char* c_szSrc, char* szDst)` — 文檔化契約、編譯器協助檢查、優化提示。
四、導出函數 (DLL/元件介面) 命名
| 模組 | 前綴 | 範例 |
| 通用函數庫 | cm | cmGetVersion() |
| 三維/虛擬實境庫 | vr | vrCreateScene() |
| 影像處理庫 | img | imgLoadTexture() |
- 巨集/錯誤碼同步使用對應前綴 (如 `CM_`、`VR_`、`IMG_`)。
- 避免與 Windows API (`CreateFile`、`GetWindowText`) 衝突。
五、檔案命名:語義化、≥5 字元、禁用流水號
- ✅ `GeoKernel.h`、`ImageProc.cpp`、`VRDevice.dll`、`Project1.bpr`
- ❌ `file1.h`、`myfile.cpp`、`temp.dll`、`test.bpr`
- 專案檔、動態庫、元件、控件、工程檔 **統一遵循**。
總結
命名規範是團隊溝通的 **共同語言**。匈牙利法則雖在現代 IDE (滑鼠懸停顯示型別) 下爭議較大,但在 **無 IDE 環境 (代碼審查、diff、日誌、嵌入式除錯)** 下仍具無可替代的即時型別可讀性。配合模組前綴、作用域前綴、動賓函數名、const 正確性、語義化檔名,構建出一套 **自說明、可工具化、跨平台穩定** 的命名體系,是專業 C/C++ 團隊的基礎建設。
- 上一篇文章: 程式設計風格規範系列(三):註解規範全景指南
- 下一篇文章: 程式設計風格規範系列(一):程式風格基石 — 縮排、資源字串、變數定義位置
Copyright ©
程式碼之家 All Rights Reserved