首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

程式設計風格規範系列(二):匈牙利命名法與介面規範完整手冊

     編輯:關於C++

前言

本系列第二部分確立 **命名規則** 與 **介面規範**,統一團隊詞彙,消除閱讀歧義,為自動化工具 (靜態分析、重構、文檔生成) 鋪路。

一、變數命名:匈牙利法則 (型別前綴 + 英文語義)

基礎型別前綴表

  • 單字首字母大寫 (PascalCase);縮寫全大寫 (如 `nCPUCount`)。
  • 非通用變數定義處附註解說明用途。

指標層級前綴

型別前綴範例
bool / BOOLbbIsParent
BYTEbybyFlag
short / intnnStepCount
long / LONGllSum
char / CHARccCount
float / FLOATffAvg
double / DOUBLEddDelta
void / VOIDvvVariant
WORD (unsigned short)wwCount
DWORD (unsigned long)dwdwBroad
HANDLE / HINSTANCEhhHandle
LPCSTR / LPCTSTRstrstrString
以 0 結尾字串szszFileName
層級規則範例 (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)

類型標籤前綴範例
structSScmNPoint { int nX, nY; }
unionUUcmLPoint { long lX, lY; }
classCCcmFPoint { public: float fPoint; }
template classC + 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` 等空泛動詞。

三、函數參數規範

  1. 參數命名遵循變數命名規範。
  2. **大型結構體傳指標/引用**,避免堆疊拷貝開銷。
  3. **入口指標參數加 `const`**:`cmCopyString(const char* c_szSrc, char* szDst)` — 文檔化契約、編譯器協助檢查、優化提示。

四、導出函數 (DLL/元件介面) 命名

模組前綴範例
通用函數庫cmcmGetVersion()
三維/虛擬實境庫vrvrCreateScene()
影像處理庫imgimgLoadTexture()
  • 巨集/錯誤碼同步使用對應前綴 (如 `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++ 團隊的基礎建設。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved