匈牙利命名规范 WIN32开发常识

 

匈牙利命名规范

几年以前,Charles Simonyi(他后来成为微软的著名程序员)设计了一种以前缀为基础的命名方法,这种方法后来称为"匈牙利表示法"以记念他.他的思想是根据每个标识符所代表的含义给它一个前缀.微软后来采用了这个思想,给每个标识符一个前缀以说明它的数据类型.因此,整型变量的前缀是n,长整型变量是nl,字符型数组变量是ca,以及字符串(以空类型结尾的字符数组)以sz为前缀.这些名字可能会非常古怪.比如说:lpszFoo表示"Foo"是一个指向以空字符为结尾的字符串的长整型指针.

这种方法的优点是使人能够通过变量的名字来辨别变量的类型,而不比去查找它的定义.遗憾的是,这种方法不仅使变量名字非常绕口,而且使改变变量类型的工作变得十分艰巨.在Windows3.1中,整型变量为16为宽.如果我们在开始时采用了一个整型变量,但是在通过30---40个函数的计算之后,发现采用整型变量宽度不够,这时我们不仅要改变这个变量的类型,而且要改变这个变量在这30--40个函数中的名字.

匈牙利命名法是微软推广的一种关于变量、函数、对象、前缀、宏定义等各种类型的符号的命名规范。匈牙利命名法的主要思想是:在变量和函数名中加入前缀以增进人们对程序的理解。它是由微软内部的一个匈牙利人发起使用的,结果它在微软内部逐渐流行起来,并且推广给了全世界的Windows开发人员。下面将介绍匈牙利命名法,后面的例子里也会尽量遵守它和上面的代码风格。还是那句话,并不是要求所有的读者都要去遵守,但是希望读者作为一个现代的软件开发人员都去遵守它。


a       Array                                     数组
b       BOOL (int)                             布尔(整数)
by     Unsigned Char (Byte)              无符号字符(字节)
c       Char                                         字符(字节)
cb     Count of bytes                         字节数
cr     Color reference value             颜色(参考)值
cx     Count of x (Short)                    x的集合(短整数)
dw   DWORD (unsigned long)                  双字(无符号长整数)
f       Flags (usually multiple bit values)    标志(一般是有多位的数值)
fn      Function                               函数
g_      global                                 全局的
h       Handle                                 句柄
i       Integer                                整数
l       Long                                   长整数
lp      Long pointer                           长指针
m_      Data member of a class                 一个类的数据成员
n       Short int                              短整数
p       Pointer                                指针
s       String                                 字符串
sz      Zero terminated String                 以0结尾的字符串
tm      Text metric                            文本规则
u       Unsigned int                           无符号整数
ul      Unsigned long (ULONG)                  无符号长整数
w       WORD (unsigned short)                  无符号短整数
x,y     x, y coordinates (short)               坐标值/短整数
v       void                                  


有关项目的全局变量用g_开始,类成员变量用m_,局部变量若函数较大则可考虑用l_用以显示说明其是局部变量。


前缀     类型                例子
g_       全局变量           g_Servers
C        类或者结构体      CDocument,CPrintInfo
m_       成员变量           m_pDoc,m_nCustomers


VC常用前缀列表:

前缀     类型     描述例子
ch      char    8位字符 chGrade
ch      TCHAR   16位Unicode集字符 chName
b       BOOL     布尔变量 bEnable
n       int      整型 nLength
n       UINT     无符整型 nLength
w       WORD    16位无符号整型 wPos
l       Long    32位有符号整型 lOffset
dw      DWORD   32位无符号整型 dwRange
p       *        指针变量,内存模块指针(Ambient memory model point) pDoc
lp      Far*     长指针 lpDoc
lpsz    LPSTR   32位字符串指针 lpszName
lpsz    LPCSTR 32位常量字符串指针 lpszName
lpsz    LPCTSTR 32位Unicode集常量指针 lpszName
h       handle Windows对象句柄 hWnd
lpfn    (*fn)()  回调函数指针 Callback Far pointer to CALLBACK function lpfnAbort


匈牙利命名法

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 = 调试;忽略标识符为发行。


静态库版本命名规范 库描述

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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值