匈牙利命名法通过在变量名前面加上相应的小写字母的符号标识作为前缀,标识出变量的作用域,类型等。
这些符号可以多个同时使用,顺序是
一、先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