您的位置:首页 > 其它

匈牙利命名法规范

2013-05-24 10:25 78 查看
匈牙利命名法是电脑程序设计中的一种变量命名规则,此命名法又可细分为:系统匈牙利命名法匈牙利应用命名法

系统命名法与应用命名法的区别在于前缀的目的。

在系统匈牙利命名法中,前缀代表了变量的实际数据类型。例如:

lAccountNum
:变量是一个长整数("l");
arru8NumberList
:变量是一个无符号8位整型数组("arru8");
szName
:变量是一个零结束字符串("sz"),这是西蒙尼最开始建议的前缀之一。

匈牙利应用命名法不表示实际数据类型,而是给出了变量目的的提示,或者说它代表了什么。

rwPosition
:变量代表一个("rw")。
usName
:变量代表一个非安全字符串("us"),需要在使用前处理。
strName
:变量代表一个包含名字的字符串("str")但是没有指明这个字符串是如何实现的。

西蒙尼建议的大多数前缀都是自然语义的,但不是所有。下面几个是来自原始论文的:

pX
是指向另一个X类型的指针,这包含非常少的语义信息。
d
是一个前缀表示两个值的区别,例如,dY可能代表一个图形沿Y轴的距离,而一个仅仅叫做y的变量可能是一个绝对坐标。这完全是自然语义的。
sz
是一个无结束或零结束的字符串。在C中,这包含一些语义信息,因为它不是很明确一个char*类型的变量是一个指向单个字符的指针,还是一个字符数组,或是一个零结束字符串。
w
标记一个变量是一个字。这基本上没有包含什么语义信息,因此大概会被当成是系统命名法。
b
标记了一个字节,和w对比可能有一些语义信息,因为C语言中,只有字节大小的数据是char型的,因此这些有时候被用来保存数值。这个前缀也许可以明确某个变量保存的是应该被看作是字母(或更一般的字符)的数值还是一个数字。

由于这种命名法通常使用小写字母开头用来助记,但是并没有对助记符本身作规定。有几种被广泛使用的习惯(见下面的示例),但是任意字母组合都可以被使用,只要它们在代码主体中保持一致就可以了。

在使用匈牙利系统命名法的代码中有时候也可能包含系统匈牙利命名法,即在描述被单独以类型方式定义的变量时使用。

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

[align=center]前  缀[/align]
[align=center]类  型[/align]
[align=left]a[/align]
[align=left]数组 (Array)[/align]
[align=left]b[/align]
[align=left]布尔值 (Boolean)[/align]
[align=left]by[/align]
[align=left]字节 (Byte)[/align]
[align=left]c[/align]
[align=left]有符号字符 (Char)[/align]
[align=left]cb[/align]
[align=left]无符号字符 (Char Byte,没有多少人用)[/align]
[align=left]cr[/align]
[align=left]颜色参考值 (ColorRef)[/align]
[align=left]cx,cy[/align]
[align=left]坐标差(长度 ShortInt)[/align]
[align=left]dw[/align]
[align=left]Double Word[/align]
[align=left]fn[/align]
[align=left]函数[/align]
[align=left]h[/align]
[align=left]Handle[/align]
[align=left]i[/align]
[align=left]整型[/align]
[align=left]l[/align]
[align=left]长整型 (Long Int)[/align]
[align=left]lp[/align]
[align=left]Long Pointer[/align]
[align=left]m_[/align]
[align=left]类的成员[/align]
[align=left]n[/align]
[align=left]短整型 (Short Int)[/align]
[align=left]np[/align]
[align=left]Near Pointer[/align]
[align=left]p[/align]
[align=left]Pointer[/align]
[align=left]s[/align]
[align=left]字符串型[/align]
[align=left]sz[/align]
[align=left]以null做结尾的字符串型 (String with Zero End)[/align]
[align=left]w[/align]
[align=left]Word[/align]
但是在任何情况下,都硬性规定使用匈牙利命名法是迂腐的。尤其是 Unix
编程,在使用没有变量名、关键字自动补齐功能的编辑器,如 vi
下,去敲入大小写混合的变量名是痛苦的。其实只要注意两个原则:1)
含义清晰,不易混淆; 2)
不和其它模块、系统API的命名空间相冲突即可。

1.有意识的为变量名、宏名加上本模块的关键字,就不至于和其它模块、系统API的命名空间相冲突;例如:
宏的名称过短,如:DEBUG;
或_DEBUG,很可能和别的模块,系统模块相冲突;

2.局部变量尤其是循环变量外,使用约定俗成的 i,j,k
,没有问题;

3.宏、常量、枚举enum,全部用大写字母;

4.全局变量加上前缀 "g",后面跟上首字母大写的单词;
MFC、句柄、控件及结构的命名规范

[align=left]Windows类型[/align]
[align=left]样本变量[/align]
[align=left]MFC类[/align]
[align=left]样本变量[/align]
[align=left]HWND[/align]
[align=left]hWnd;[/align]
[align=left]CWnd*[/align]
[align=left]pWnd;[/align]
[align=left]HDLG[/align]
[align=left]hDlg;[/align]
[align=left]CDialog*[/align]
[align=left]pDlg;[/align]
[align=left]HDC[/align]
[align=left]hDC;[/align]
[align=left]CDC*[/align]
[align=left]pDC;[/align]
[align=left]HGDIOBJ[/align]
[align=left]hGdiObj;[/align]
[align=left]CGdiObject*[/align]
[align=left]pGdiObj;[/align]
[align=left]HPEN[/align]
[align=left]hPen;[/align]
[align=left]CPen*[/align]
[align=left]pPen;[/align]
[align=left]HBRUSH[/align]
[align=left]hBrush;[/align]
[align=left]CBrush*[/align]
[align=left]pBrush;[/align]
[align=left]HFONT [/align]
[align=left]hFont;[/align]
[align=left]CFont*[/align]
[align=left]pFont;[/align]
[align=left]HBITMAP [/align]
[align=left]hBitmap;[/align]
[align=left]CBitmap*[/align]
[align=left]pBitmap;[/align]
[align=left]HPALETTE [/align]
[align=left]hPaltte;[/align]
[align=left]CPalette*[/align]
[align=left]pPalette;[/align]
[align=left]HRGN [/align]
[align=left]hRgn;[/align]
[align=left]CRgn*[/align]
[align=left]pRgn;[/align]
[align=left]HMENU [/align]
[align=left]hMenu;[/align]
[align=left]CMenu*[/align]
[align=left]pMenu;[/align]
[align=left]HWND [/align]
[align=left]hCtl;[/align]
[align=left]CState* [/align]
[align=left]pState;[/align]
[align=left]HWND [/align]
[align=left]hCtl;[/align]
[align=left]CButton*[/align]
[align=left]pButton;[/align]
[align=left]HWND [/align]
[align=left]hCtl;[/align]
[align=left]CEdit*[/align]
[align=left]pEdit;[/align]
[align=left]HWND [/align]
[align=left]hCtl;[/align]
[align=left]CListBox*[/align]
[align=left]pListBox;[/align]
[align=left]HWND [/align]
[align=left]hCtl;[/align]
[align=left]CComboBox*[/align]
[align=left]pComboBox;[/align]
[align=left]HWND [/align]
[align=left]hCtl;[/align]
[align=left]CScrollBar*[/align]
[align=left]pScrollBar;[/align]
[align=left]HSZ [/align]
[align=left]hszStr;[/align]
[align=left]CString [/align]
[align=left]pStr;[/align]
[align=left]POINT [/align]
[align=left]pt;[/align]
[align=left]CPoint [/align]
[align=left]pt;[/align]
[align=left]SIZE [/align]
[align=left]size;[/align]
[align=left]CSize [/align]
[align=left]size;[/align]
[align=left]RECT [/align]
[align=left]rect;[/align]
[align=left]CRect [/align]
[align=left]rect;[/align]
一般前缀命名规范

前缀
[align=left]类型[/align]
[align=left]实例[/align]
[align=left]C[/align]
[align=left]类或结构[/align]
[align=left]CDocument,CPrintInfo[/align]
[align=left]m_[/align]
[align=left]成员变量[/align]
[align=left]m_pDoc,m_nCustomers[/align]
变量命名规范

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

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

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

[align=left]标识符[/align]
[align=left]值和含义[/align]
[align=left]u [/align]
[align=left]ANSI(N)或Unicode(U)[/align]
[align=left]d [/align]
调试或发行:D =
调试;忽略标识符为发行。
静态库版本命名规范

[align=left][/align]
[align=left]描述[/align]
[align=left]NAFXCWD.LIB[/align]
[align=left]调试版本:MFC静态连接库[/align]
[align=left]NAFXCW.LIB[/align]
[align=left]发行版本:MFC静态连接库[/align]
[align=left]UAFXCWD.LIB[/align]
[align=left]调试版本:具有Unicode支持的MFC静态连接库[/align]
[align=left]UAFXCW.LIB[/align]
[align=left]发行版本:具有Unicode支持的MFC静态连接库[/align]
动态连接库命名规范

[align=left]名称[/align]
[align=left]类型[/align]
[align=left]_AFXDLL[/align]
[align=left]唯一的动态连接库(DLL)版本[/align]
[align=left]WINAPI [/align]
[align=left]Windows所提供的函数[/align]
Windows.h中新的命名规范

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: