..::一步一个坚定的脚印::..

匈牙利命名法

上一篇 / 下一篇  2008-05-25 02:44:28 / 个人分类:MFC Windows 程序设计(第2版)-学习笔记

匈牙利命名规范

    几年以前,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       类或者结构体       CDocumentCPrintInfo

m_      成员变量           m_pDocm_nCustomers


VC常用前缀列表:

前缀类型描述例子
chchar8位字符chGrade
chTCHAR16位Unicode集字符chName
bBOOL布尔变量bEnable
nint整型nLength
nUINT无符整型nLength
wWORD16位无符号整型wPos
lLong32位有符号整型lOffset
dwDWORD32位无符号整型dwRange
p*指针变量,内存模块指针(Ambient memory model point)pDoc
lpFar*长指针lpDoc
lpszLPSTR32位字符串指针lpszName
lpszLPCSTR32位常量字符串指针lpszName
lpszLPCTSTR32位Unicode集常量指针lpszName
hhandleWindows对象句柄hWnd
lpfn(*fn)()   回调函数指针 Callback Far pointer to CALLBACK function lpfnAbort

MFC、句柄、控件及结构的命名规范
Windows类型样本变量MFC类样本变量
HWNDhWnd;CWnd*pWnd;
HDLGhDlg;CDialog*pDlg;
HDChDC;CDC*pDC;
HGDIOBJhGdiObj;CGdiObject*pGdiObj;
HPENhPen;CPen*pPen;
HBRUSHhBrush;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
变量命名规范
前缀类型描述实例
chchar8位字符chGrade
ch TCHAR如果_UNICODE定义,则为16位字符chName
bBOOL布尔值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_MAIINFRAME1~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
摘自http://qhmoon.blogdriver.com/qhmoon/1181508.html


TAG:

引用 删除 Guest   /   2008-06-25 10:16:09
5
谢了
引用 删除 Guest   /   2008-06-25 10:15:22
5
谢了
引用 删除 Guest   /   2008-06-25 10:15:13
5
谢了
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-09-08  
 123456
78910111213
14151617181920
21222324252627
282930    

我的存档

数据统计

  • 访问量: 319
  • 日志数: 8
  • 建立时间: 2008-05-06
  • 更新时间: 2008-05-26

RSS订阅

Open Toolbar