匈牙利命名法通過在變量名前面加上相應的小寫字母的符號標識作爲前綴,標識出變量的作用域,類型等。
這些符號可以多個同時使用,順序是
一、先m_(成員變量)或者是g_(全局變量)
二、就是指針,通常以p來表示
三、然後是簡單數據類型
四、再是其他
例如:m_lpszStr, 表示 指向一個以 '/0' 字符結尾的字符串的長指針成員變量。
匈牙利命名法關鍵是:
標識符的名字以一個或者多個小寫字母開頭作爲前綴;
前綴之後的是首字母大寫的一個單詞或多個單詞組合,該單詞要指明變量的用途。
前綴 |
類型 |
a |
數組 (Array) |
b |
布爾值 (Boolean) |
by |
字節 (Byte) == 8 bit |
c |
有符號字符 (Char) |
cb |
無符號字符 (Char Byte,沒有多少人用) |
cr |
顏色參考值 (ColorRef) |
cx,cy |
座標差(長度 ShortInt) |
dw |
雙字 (Double Word) == 4 Byte == 4 * 8 bit |
fn |
函數(function) |
h |
句柄(Handle) |
i |
整型(int) |
l |
長整型 (Long int) |
lp |
長指針(Long Pointer) |
m_ |
類的成員(member of a class) |
n |
短整型 (Short Int) |
np |
近指針(Near Pointer) |
p |
指針(Pointer) |
s |
字符串型(string) |
sz |
以字符'/0'結尾的字符串 (String with Zero End) |
w |
字(Word) == 2 Byte == 2 * 8 bit |
但是在任何情況下,都硬性規定使用匈牙利命名法是迂腐的。尤其是 Unix 編程,在使用沒有變量名、關鍵字自動補齊功能的編輯器,如 vi 下,去敲入大小寫混合的變量名是痛苦的。
其實只要注意兩個原則:
1) 含義清晰,不易混淆;
2) 不和其它模塊、系統API的命名空間相沖突即可。
1. 有意識的爲變量名、宏名加上本模塊的關鍵字,就不至於和其它模塊、系統API的命名空間相沖突;
例如: 宏的名稱過短,如:"DEBUG" 或 "_DEBUG",很可能和別的模塊,系統模塊相沖突;
2. 局部變量尤其是循環變量外,使用約定俗成的 i,j,k ,沒有問題;
3. 宏、常量、枚舉enum,全部用大寫字母;
4. 全局變量加上前綴 "g",後面跟上首字母大寫的單詞;
全局變量嗎,費事一點可以諒解
MFC命名規則
Windows類型 |
樣本變量 |
MFC類 |
樣本變量 |
HWND |
hWnd; |
CWnd* |
pWnd; |
HDLG |
hDlg; |
CDialog* |
pDlg; |
HDC |
hDC; |
CDC* |
pDC; |
HGDIOBJ |
hGdiObj; |
CGdiObject* |
pGdiObj; |
HPEN |
hPen; |
CPen* |
pPen; |
HBRUSH |
hBrush; |
CBrush* |
pBrush; |
HFONT |
hFont; |
CFont* |
pFont; |
HBITMAP |
hBitmap; |
CBitmap* |
pBitmap; |
HPALETTE |
hPaltte; |
CPalette* |
pPalette; |
HRGN |
hRgn; |
CRgn* |
pRgn; |
HMENU |
hMenu; |
CMenu* |
pMenu; |
HWND |
hCtl; |
CState* |
pState; |
HWND |
hCtl; |
CButton* |
pButton; |
HWND |
hCtl; |
CEdit* |
pEdit; |
HWND |
hCtl; |
CListBox* |
pListBox; |
HWND |
hCtl; |
CComboBox* |
pComboBox; |
HWND |
hCtl; |
CScrollBar* |
pScrollBar; |
HSZ |
hszStr; |
CString |
pStr; |
POINT |
pt; |
CPoint |
pt; |
SIZE |
size; |
CSize |
size; |
RECT |
rect; |
CRect |
rect; |
還有一點想說明一下:
常量和宏定義必須全部以大寫字母來撰寫,中間可根據意義的連續性用下劃線連接,每一條定義的右側必須有一簡單的註釋,說明其作用;
下面是vc資源名字定義格式:
菜單: IDM_XX //M:Menu
位圖: IDB_XX //B:Bitmap
對話框: IDD_XX //D: Dialog
字符串: IDS_XX //S:String
ICON: IDI_XX //I:Icon
按鈕控件: IDC_BTN_XX //BTN:Button
編輯控件: IDC_EDT_XX //EDT:EditBox
列表控件: IDC_LST_XX //LST: ListCtrl
樹表控件: IDC_TRE_XX //TRE:TreeCtrl
富文本控件: IDC_RCH_XX //RCH:RichEdit
靜態本控件: IDC_STT_XX //STT:StaticText
組合框控件: IDC_CMB_XX //CMB:ComboBox
滾動條控件: IDC_SCR_XX //SCR:ScrollBar
滑動條控件: IDC_SLD_XX //SLD:Slider
多選項控件: IDC_CHK_XX //CHK:CheckBox
單選項控件: IDC_RDB_XX //RDB:RadioButton