匈牙利命名法、骆驼命名法、帕斯卡命名法介绍

变量(还包括宏)的命名规则,比较系统和彻底的有 Windows 编程中用到的匈牙利命名法。匈牙利命名法通过在变量名前面加上相应的小写字母的符号标识作为前缀,标识出变量的作用域,类型等。这些符号可以多个同时使用,顺序是先m_(成员变量),再指针,再简单数据类型,再其他。例如:m_lpszStr, 表示 指向一个以0字符结尾的字符串的长指针成员变量。

有关匈牙利命名法的一点有意思的说明是它的名字的由来。这种命名技术是由一位能干的 Microsoft 程序员查尔斯·西蒙尼(Charles Simonyi) 提出的,他出生在匈牙利。在 Microsoft 公司中和他一起工作的人被教会使用这种约定。这对他们来说一切都很正常。但对那些 Simonyi 领导的项目组之外的人来说却感到很奇特,他们认为这是死板的表达方式,甚至说代有这样奇怪的外观是因为它是用匈牙利文写的。从此这种命名方式就被叫做匈牙利命名法。

基本原则是:变量名=属性+类型+对象描述

即一个变量名是由三部分信息组成,这样,程序员很容易理解变量的类型、用途,而且便于记忆。

下边是一些推荐使用的规则例子,你可以挑选使用,也可以根据个人喜好作些修改再用之。

 

⑴属性部分:

全局变量: g_

常量: c_

类成员变量: m_

⑵类型部分:

指针: p

句柄: h

布尔型: b

浮点型: f

无符号: u

⑶描述部分:

初始化: Init

临时变量: Tmp

目的对象: Dst

源对象: Src

窗口: Wnd

 

下边举例说明:

hwnd h表示句柄,wnd表示窗口,合起来为“窗口句柄”。

m_bFlag m表示成员变量,b表示布尔,合起来为:“某个类的成员变量,布尔型,是一个状态标志”。

 

 

匈牙利命名法关键是:标识符的名字以一个或者多个小写字母开头作为前缀;前缀之后的是首字母大写的一个单词或多个单词组合,该单词要指明变量的用途。

 

 

 

匈牙利命名法中常用的小写字母的前缀
前缀      类型
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的命名空间相冲突即可。


有意识的为变量名、宏名加上本模块的关键字,就不至于和其它模块、系统API的命名空间相冲突;
例如: 宏的名称过短,如:"DEBUG" "_DEBUG",很可能和别的模块,系统模块相冲突;
局部变量尤其是循环变量外,使用约定俗成的 i,j,k ,没有问题;
宏、常量、枚举enum,全部用大写字母;
全局变量加上前缀 "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

类或结构

CDocumentCPrintInfo

m_

成员变量

m_pDocm_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

10x6FFF

IDD_

对话框资源

IDD_SPELL_CHECK

10x6FFF

HIDD_

对话框资源的Help上下文

HIDD_SPELL_CHECK

0x200010x26FF

IDB_

位图资源

IDB_COMPANY_LOGO

10x6FFF

IDC_

光标资源

IDC_PENCIL

10x6FFF

IDI_

图标资源

IDI_NOTEPAD

10x6FFF

ID_

来自菜单项或工具栏的命令

ID_TOOLS_SPELLING

0x80000xDFFF

HID_

命令Help上下文

HID_TOOLS_SPELLING

0x180000x1DFFF

IDP_

消息框提示

IDP_INVALID_PARTNO

80xDEEF

HIDP_

消息框Help上下文

HIDP_INVALID_PARTNO

0x300080x3DEFF

IDS_

串资源

IDS_COPYRIGHT

10x7EEF

IDC_

对话框内的控件

IDC_RECALC

80xDEEF

 

 

Microsoft MFC宏命名规范

名称

类型

_AFXDLL

唯一的动态连接库(Dynamic Link LibraryDLL)版本

_ALPHA

仅编译DEC Alpha处理器

_DEBUG

包括诊断的调试版本

_MBCS

编译多字节字符集

_UNICODE

在一个应用程序中打开Unicode

AFXAPI

MFC提供的函数

CALLBACK

通过指针回调的函数

库标识符命名法

标识符

值和含义

u

ANSIN)或UnicodeU

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 NTWindows 9x32位);它是unsigned int的同义词

LRESULT

窗口程序返回值的类型

LPARAM

声明lParam所使用的类型,lParam是窗口程序的第四个参数

WPARAM

声明wParam所使用的类型,wParam是窗口程序的第三个参数

LPVOID

一般指针类型,与(void *)相同,可以用来代替LPSTR



二、骆驼命名法: (camel方法)

         骆驼式命令法,正如它的名称所表示的那样,是指混合使用大小写字母来构成变量和函数的名字。例如,下面是分别用骆驼式命名法和下划线法命名的同一个函数:

         printEmployeePaychecks();

         print_employee_paychecks();

        第一个函数名使用了骆驼式命名法——函数名中的每一个逻辑断点都有一个大写字母来标记;第二个函数名使用了下划线法----函数名中的每一个逻辑断点都有一个下划线来标记。

        骆驼式命名法近年来越来越流行了,在许多新的函数库和Microsoft Windows这样的环境中,它使用得当相多。另一方面,下划线法是c出现后开始流行起来的,在许多旧的程序和UNIX这样的环境中,它的使用非常普遍。


三、帕斯卡(pascal)命名法:

        与骆驼命名法类似。只不过骆驼命名法是首字母小写,而帕斯卡命名法是首字母大写

         如:public void DisplayInfo();

                string UserName;

                二者都是采用了帕斯卡命名法.


在C#中,以帕斯卡命名法和骆驼命名法居多。


简单说

MyData 就是一個帕斯卡命名的示例
而myData是一個骆驼命名法,它第一個單詞的第一個字母小寫,後面的單詞首字母大寫,看起來像一個骆驼 而iMyData是一個匈牙利命名法,它的小寫的i說明了它的型態,後面的和帕斯卡命名相同,指示了該變量的用途.

posted on 2008-11-19 18:52  Peter wang的学习.NET之路  阅读(597)  评论(0编辑  收藏  举报

导航