最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

匈牙利命名法规范

互联网 admin 1浏览 0评论

匈牙利命名法规范

匈牙利命名法是电脑程序设计中的一种变量命名规则,此命名法又可细分为:系统匈牙利命名法匈牙利应用命名法

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

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

  • 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 领导的项目组之外的人来说却感到很奇特,他们认为这是死板的表达方式,甚至说代有这样奇怪的外观是因为它是用匈牙利文写的。从此这种命名方式就被叫做匈牙利命名法。匈牙利命名法关键是:标识符的名字以一个或者多个小写字母开头作为前缀;前缀之后的是首字母大写的一个单词或多个单词组合,该单词要指明变量的用途。 匈牙利命名法中常用的小写字母的前缀

前  缀 类  型
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

匈牙利命名法规范

匈牙利命名法是电脑程序设计中的一种变量命名规则,此命名法又可细分为:系统匈牙利命名法匈牙利应用命名法

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

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

  • 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 领导的项目组之外的人来说却感到很奇特,他们认为这是死板的表达方式,甚至说代有这样奇怪的外观是因为它是用匈牙利文写的。从此这种命名方式就被叫做匈牙利命名法。匈牙利命名法关键是:标识符的名字以一个或者多个小写字母开头作为前缀;前缀之后的是首字母大写的一个单词或多个单词组合,该单词要指明变量的用途。 匈牙利命名法中常用的小写字母的前缀

前  缀 类  型
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

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论