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

匈牙利命名法完整指南:前綴規則、範例與現代觀點

     編輯:VC 教學

前言

匈牙利命名法由微軟 Charles Simonyi 發明,透過變數前綴標示型別與用途,在早期弱型別語言(如 C)與無 IDE 環境下極具價值。雖然現代 C++ 配合強型別、智慧型編輯器與 auto 推導,其必要性大幅降低,但理解它對維護舊代碼、閱讀 Windows API 文檔仍不可或缺。

核心前綴對照表

組合規則與順序

多前綴組合順序:範圍 → 指標層級 → 基礎型別 → 其他修飾

m_lpszStr
│ │  │  └─ 基礎型別:sz (零結尾字串)
│ │  └───── 指標層級:p (指標)
│ └──────── 指標層級:l (長指標/32位)
└────────── 範圍:m_ (成員變數)

意義:指向零結尾字串的長指標成員變數

常見變體與特例

  • 類別成員:統一加 m_ 前綴,如 m_hWnd、m_nCount
  • 全域/靜態變數:部分團隊用 g_、s_ 區分
  • 函數參數:可用 p、n 等單一前綴,如 void SetCount(int nCount)
  • MFC/ATL 類別:常見 C 前綴類名(CString、CWnd),成員變數用 m_,如 CStatusBar m_wndStatusBar(此處 wnd 非標準匈牙利)

現代 C++ 的觀點與建議

為何現代 C++ 較少使用?

  • 型別系統強健:編譯器會檢查型別錯誤,前綴資訊冗餘
  • IDE 支援豐富:滑鼠懸停即顯示型別、定義跳轉、重構工具完善
  • auto 推導:auto p = std::make_unique(); 型別一目瞭然
  • 泛型程式設計:模板程式碼中型別不固定,前綴難以套用
  • 可讀性爭議:dwFlags vs flags,後者在強型別語言更簡潔

建議策略

  1. 新專案:採用 描述性命名(windowHandle、itemCount),遵循核心指南
  2. 維護舊代碼:保持既有風格一致性,不要混用
  3. Windows API 互操作:參數命名可參考 API 慣例(hWnd、lpRect),降低認知負擔
  4. 成員變數:保留 m_ 或 _ 後綴(count_)以區分區域變數,這在現代風格中仍被廣泛接受

結語

匈牙利命名法是特定歷史條件下的產物,理解其邏輯有助於閱讀經典代碼與系統 API,但現代 C++ 開發應優先採用清晰的描述性命名,配合強型別與工具鏈,寫出自文檔化的程式碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
前綴含義範例
aArray(陣列)aItems
bBoolean(布林)bVisible
byByte(位元組)byFlags
cChar(有號字元)cCh
cbChar Byte(無號字元)cbBuffer
crColorRef(顏色參考)crBack
cx, cy座標長度 (ShortInt)cxWidth, cyHeight
dwDouble Word (DWORD)dwSize
fnFunction(函數指標)fnCallback
hHandle(控制代碼)hWnd, hFile
iInteger(整數)iCount
m_Member of class(成員變數)m_nCount
nShort Integer (short)nPos
npNear Pointer(近指標,16位遺物)npData
pPointer(指標)pNext
lpLong Pointer(遠指標,32位)lpBuffer
sString(字串,非零結尾)sName
szZero-terminated String(以 \0 結尾)szPath
tmText(文字內容)tmCaption
wWord (WORD, 16位無號)wFlags
x, y座標xPos, yPos