匈牙利命名法

变量(还包括宏)的命名规则,比较系统和彻底的有 Windows 编程中用到的匈牙利命名法。匈牙利命名法通过在变量名前面加上相应的小写字母的符号标识作为前缀,标识出变量的作用域,类型等。这些符号可以多个同时使用,顺序是先 m_ (成员变量),再指针,再简单数据类型,再其他。例如: m_lpszStr, 表示指向一个以 0 字符结尾的字符串的长指针成员变量。
有关匈牙利命名法的一点有意思的说明是它的名字的由来。这种命名技术是由一位能干的 Microsoft 程序员查尔斯 · 西蒙尼 (Charles Simonyi) 提出的,他出生在匈牙利。在 Microsoft 公司中和他一起工作的人被教会使用这种约定。这对他们来说一切都很正常。但对那些 Simonyi 领导的项目组之外的人来说却感到很奇特,他们认为这是死板的表达方式,甚至说代有这样奇怪的外观是因为它是用匈牙利文写的。从此这种命名方式就被叫做匈牙利命名法。匈牙利命名法关键是:标识符的名字以一个或者多个小写字母开头作为前缀;前缀之后的是首字母大写的一个单词或多个单词组合,该单词要指明变量的用途。
匈牙利命名法中常用的小写字母的前缀

前  缀
类  型
a
数组 (Array)
b
布尔值 (Boolean)
by
字节 (Byte)
c
有符号字符 (Char)
cb
无符号字符 (Char Byte ,没有多少人用 )
cr
颜色参考值 (ColorRef)
cx,cy
坐标差(长度 ShortInt
dw
Double Word
fn
函数
h
Handle
i
整型
l
长整型 (Long Int)
lp
Long Pointer
m_
类的成员
n
短整型 (Short Int)
np
Near Pointer
p
Pointer
s
字符串型
sz
null 做结尾的字符串型 (String with Zero End)
w
Word

但是在任何情况下,都硬性规定使用匈牙利命名法是迂腐的。尤其是 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

一般前缀命名规范

前缀
类型
实例
C
类或结构
CDocument CPrintInfo
m_
成员变量
m_pDoc m_nCustomers

变量命名规范

前缀
类型
描述
实例
ch
char
8 位字符
chGrade
ch
TCHAR
如果 _UNICODE 定义,则为 16 位字符
chName
b
BOOL
布尔值
bEnable
n
int
整型(其大小依赖于操作系统)
nLength
n
UINT
无符号值(其大小依赖于操作系统)
nHeight
w
WORD
16 位无符号值
wPos
l
LONG
32 位有符号整型
lOffset
dw
DWORD
32 位无符号整型
dwRange
p
*
指针
pDoc
lp
FAR*
远指针
lpszName
lpsz
LPSTR
32 位字符串指针
lpszName
lpsz
LPCSTR
32 位常量字符串指针
lpszName
lpsz
LPCTSTR
如果 _UNICODE 定义,则为 32 位常量字符串指针
lpszName
h
handle
Windows 对象句柄
hWnd
lpfn
callback
指向 CALLBACK 函数的远指针
 

应用程序符号命名规范

前缀
符号类型
实例
范围
IDR_
不同类型的多个资源共享标识
IDR_MAIINFRAME
1 0x6FFF
IDD_
对话框资源
IDD_SPELL_CHECK
1 0x6FFF
HIDD_
对话框资源的 Help 上下文
HIDD_SPELL_CHECK
0x20001 0x26FF
IDB_
位图资源
IDB_COMPANY_LOGO
1 0x6FFF
IDC_
光标资源
IDC_PENCIL
1 0x6FFF
IDI_
图标资源
IDI_NOTEPAD
1 0x6FFF
ID_
来自菜单项或工具栏的命令
ID_TOOLS_SPELLING
0x8000 0xDFFF
HID_
命令 Help 上下文
HID_TOOLS_SPELLING
0x18000 0x1DFFF
IDP_
消息框提示
IDP_INVALID_PARTNO
8 0xDEEF
HIDP_
消息框 Help 上下文
HIDP_INVALID_PARTNO
0x30008 0x3DEFF
IDS_
串资源
IDS_COPYRIGHT
1 0x7EEF
IDC_
对话框内的控件
IDC_RECALC
8 0xDEEF

Microsoft MFC 宏命名规范

名称
类型
_AFXDLL
唯一的动态连接库( Dynamic Link Library DLL )版本
_ALPHA
仅编译 DEC Alpha 处理器
_DEBUG
包括诊断的调试版本
_MBCS
编译多字节字符集
_UNICODE
在一个应用程序中打开 Unicode
AFXAPI
MFC 提供的函数
CALLBACK
通过指针回调的函数

库标识符命名法

标识符
值和含义
u
ANSI N )或 Unicode U
d
调试或发行: D = 调试;忽略标识符为发行。

静态库版本命名规范

描述
NAFXCWD.LIB
调试版本: MFC 静态连接库
NAFXCW.LIB
发行版本: MFC 静态连接库
UAFXCWD.LIB
调试版本:具有 Unicode 支持的 MFC 静态连接库
UAFXCW.LIB
发行版本:具有 Unicode 支持的 MFC 静态连接库

动态连接库命名规范

名称
类型
_AFXDLL
唯一的动态连接库( DLL )版本
WINAPI
Windows 所提供的函数

Windows.h 中新的命名规范

类型
定义描述
WINAPI
使用在 API 声明中的 FAR PASCAL 位置,如果正在编写一个具有导出 API 人口点的 DLL ,则可以在自己的 API 中使用该类型
CALLBACK
使用在应用程序回叫例程,如窗口和对话框过程中的 FAR PASCAL 的位置
LPCSTR
LPSTR 相同,只是 LPCSTR 用于只读串指针,其定义类似( const char FAR*
UINT
可移植的无符号整型类型,其大小由主机环境决定(对于 Windows NT Windows 9x 32 位);它是 unsigned int 的同义词
LRESULT
窗口程序返回值的类型
LPARAM
声明 lParam 所使用的类型, lParam 是窗口程序的第四个参数
WPARAM
声明 wParam 所使用的类型, wParam 是窗口程序的第三个参数
LPVOID
一般指针类型,与( void * )相同,可以用来代替 LPSTR

 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值