本站启用国内永久域名: www.LewenSky.cn,请大家使用新域名访问网站!
9月19

匈牙利命名法

| |
10:37C/C++  From: 网络


      n年以前,Charles Simonyi(他后来成为微软的著名程序员)设计了一种以前缀为基础的命名方法,这种方法后来称为"匈牙利表示法"以记念他.他的思想是根据每个标识符所代表的含义给它一个前缀.微软后来采用了这个思想,给每个标识符一个前缀以说明它的数据类型.因此,整型变量的前缀是n,长整型变量是nl,字符型数组变量是ca,以及字符串(以空类型结尾的字符数组)以sz为前缀.这些名字可能会非常古怪.比如说:lpszFoo表示"Foo"是一个指向以空字符为结尾的字符串的长整型指针.
      这种方法的优点是使人能够通过变量的名字来辨别变量的类型,而不比去查找它的定义.遗憾的是,这种方法不仅使变量名字非常绕口,而且使改变变量类型的工作变得十分艰巨.在Windows3.1中,整型变量为16为宽.如果我们在开始时采用了一个整型变量,但是在通过30---40个函数的计算之后,发现采用整型变量宽度不够,这时我们不仅要改变这个变量的类型,而且要改变这个变量在这30--40个函数中的名字.
      因为不切实际,除了一些顽固的Windows程序员外已经没有人再使用"匈牙利表示法"了.毫无疑问,在某种场合它依然存在,但大部分人现在已经抛弃它了.一般而言,输入前缀是一种糟糕的想法,因为它把变量于其类型紧紧地绑在了一起.
      对于30行以下的函数,匈牙利方法一般有优势。尤其是对界面编程,有优势。但对于有强烈的算法要求、尤其是有很多抽象类型的C++程序,匈牙利方法简直是一个灾难。看你用在什么地方。现在有了很好的IDE工具,如:VC,SourceInsight等.选中变量,会自动提示告诉你它的声明和定义,这样匈牙利命名法就没有很大的必要了.无非就是为了程序可读性较好.实际上良好的代码书写习惯比强制使用匈牙利命名法更重要.系统性。整体性。可读性。分类要清楚。要有注释!
      匈牙利命名法是微软推广的一种关于变量、函数、对象、前缀、宏定义等各种类型的符号的命名规范。匈牙利命名法的主要思想是:在变量和函数名中加入前缀以增进人们对程序的理解。它是由微软内部的一个匈牙利人发起使用的,结果它在微软内部逐渐流行起来,并且推广给了全世界的Windows开发人员。下面将介绍匈牙利命名法,后面的例子里也会尽量遵守它和上面的代码风格。还是那句话,并不是要求所有的读者都要去遵守,但是希望读者作为一个现代的软件开发人员都去遵守它。

匈牙利命名法

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

?

表一:匈牙利命名法

前缀

类型

描述

实例

arr

Array

静态数组

arrPoint

b

BOOL

布尔值

bEnabled

by

unsigned char(BYTE)

8位无符号字符

byWeek

ch

Char

 8位字符

chGrade

tch

TCHAR

如果是_UNICODE,为16位字符

tchName

i/n

Int

整形(其大小依赖于操作系统)

iRange

u

UINT

无符号整形(其大小依赖于操作系统)

nLength

us

unsigned short

无符号短整形

usPort

w

WORD

16位无符号值

wParam

l

LONG

32位有符号整形

loffset

dw

DWORD

32位无符号整形

dwVolume

f

Float

4字节浮点数

fHigh

d

Double

8字节浮点数

dAmount

cy

CURRENCY

8字节货币类型

cySell

p

*

指针

pDoc

lp

FAR *

远指针

lpDoc

lpsz

LPSTR

32位字符串指针

lpszName

lpcsz

LPCSTR

32位常量字符串指针

lpcszName

lpctsz

LPCTSTR

如果_UNICODE定义,为32位常量字符串指针

lpctszName

bstr

BSTR

带有4字节长度前缀的w_chart数组

bstrMessage

pbstr

BSTR*

BSTR数据类型指针

pbstrMsg

str

String

CString类型的字符串

strMessage

och

OLECHAR

OLECHAR字符类型

ochX

osz

OLECHAR*

OLECHAR字符串类型

oszX

var

VARIANT

VARIANT数据类型

var

pvar

VARIANT*

VARIANT数据类型指针

pvar

sa

SAFEARRAY

SAFEARRAY数据类型

sa

psa

SAFEARRAY*

SAFEARRAY数据类型指针

psa

dlg

CDialog

Windows对话框

dlg

stc

CStatic

Windows静态文本控件

stc

edt

Cedit

Windows编辑框控件

edt

lsb

CListBox

Windows列表控件

lsb

btn

CButton

Windows按钮控件

btn

scb

CScrollBar

Windows滚动条控件

scb

spn

CSpinButtonCtrl

Windowswe微调按钮控件

spn

tab

CTabCtrl

Windows选项卡控件

tab

rtf

CRichEditCtrl

Windows富文本编辑框控件

rtf

sld

CSliderCtrl

Window滑块控件

sld

list

ClistCtrl

Windows列表控件

list

tre

CtreeCtrl

Windows树形控件

tre

dtc

CDateTimeCtrl

Windows时间选取器控件

dtc

prg

CProgressCtrl

Windows进度指示器控件

prg

cbo

CComboBox

Windows组合框控件

cbo

ils

CImageList

Windows图像列表

ils

tlb

CToolBarCtrl

Windows工具条控件

tlb

mnu

Cmenu

Windows菜单控件

mnu

sta

CStatusBar

Windows状态条控件

sta

wnd

CWnd

Windows窗口

wnd

cx

X

Windows X坐标

cx

cy

Y

Windows Y坐标

cy

pt

Cpoint

Windows点阵

hWnd

size

Csize

Windows尺寸

size

rect/rc

Crect

Windows矩形

rect

pen

Cpen

Windows画笔

pen

br

Cbrush

Windows刷子

br

fnt

Cfont

Windows字体

fnt

cr

COLORREF

Windows颜色值RGB

cr

PMp

Temp

 临时变量

PMpBuff

h

Handle

Windows对象句柄

hWnd

lpfn

Callback

指向CALLBACK函数的远指针

lpfnAbort

it/iter

iterator

迭代子

it

vect

std::vector

标准模板库

vect

map

std:map

标准模板库

map

deque

std:deque

标准模板库

deque

list

std:list

标准模板库

list

set

std:set

标准模板库

Set

multiset

std:multiset

标准模板库

multiset

multimap

std:multimap

标准模板库

multimap


*      指针类型的变量,必须加上前缀"p",如:int* pnValue;

*      全局(静态)变量的命名规则同第一条的规定,并且必须加上前缀"g_"

*      类成员(静态)变量的命名规则同第一条的规定,并且必须加上前缀"m_"

*      模块(函数/过程)内部的重要变量命名遵循第一条的规定。

*      模块(函数/过程)内部的静态变量命名遵循第一条的规定,并且加上前缀"s_"

*      其余变量在不损害程序易读易懂原则的基础上酌情处理。这些变量通常是模块内的临时变量,如循环控制变量、数组的下标等,它们可用缩写进行简化处理,如:int i;

3.1.1.1               常量命名规则

*      (#define)或者常量修饰符(const):大写字母组成的名词词组,单词间用下划线作为连接符,如:#define INVALID_CLOSE 0;  const double INVALID_CLOSE = double(0);

*      枚举类型(enum):此时的命名规则同"变量命名的一般性规则",可参考MFCADO等的命名方式。

3.1.1.2             函数命名规则

单词构成的动宾词组,每个单词首字母大写,其余字母小写。如:void DrawLine ( void );

3.1.1.3             类命名规则

*      类的原型,是前缀"C"加单词构成的动宾词组,每个单词首字母大写,其余字母小写。如:class CStockPacket;     class  CPacket;

*      类的实例变量,采用小写首字母缩写的方式定义,如:CStockPacket sp;

*      在对类的成员变量和成员函数定义时,要加以分类,并界定相应的存取权限(参见表二:类成员的分类描述

表二:类成员的分类描述

分类描述

存取权限(依实际应用而定)

// Constructors

Public

// Attributes

Private

// Operations(对于com组件是//Methods

Public

// Overridables

Protected

// Implementation

Private

3.1.1.4             结构命名规则

*      结构的原型采用组合词的方式定义,并且全部采用大写字符的形式。如:

typedef struct tagStockTrans

{

    DWORD       dwOpen;

    ...

}   STOCKTRANS;

*      结构的实例变量,采用小写首字母缩写的方式定义,如:STOCKTRANS st;



出处:网络
转载时必须以链接形式注明出处及本声明!


最新日志 随机日志 综合排行
  • OFFICE 2010 VOL...
  • 格式工厂绿色版 V2.90
  • Password Invent...
  • VideoCacheView ...
  • 电脑店U盘启动盘制作工具 3....
  • 阿里旺旺AliIM2011_7...
  • 极点五笔十周年纪念版
  • PPTV网络电视3.1.1.0...
  • WinRAR注册方法
  • 紫光华宇拼音输入法 6.8.0...
  • PPTV网络电视V2.6.2....
  • WORD2003如何自动生成目...
  • foobar2000 V1.2...
  • QQ2009登录器03.28(...
  • Diskeeper 2010 ...
  • PPTV网络电视 V2.5.5...
  • 看雪论坛精华十周年纪念版绿色版...
  • PotPlayer 常见问题整...
  • USBDeview 1.50 ...
  • 迅雷7.1.6.2194 独木...
  • 安装软件时出现系统提示&quo...
  • XP与XP无线共享设置(笔记本...
  • ZineMaker目录模板大集...
  • 没有不可能 轻松实现PDG转P...
  • CString转char的方法...
  • [转]MSDN精简版、MSDN...
  • 将IE、FIREFOR (火狐...
  • VC多线程编程(转)
  • MyEclipse6.5下载地...
  • Diskeeper 2010 ...
  • Tags: ,
    阅读(3061) | 评论(19) | 引用(0)
    发表评论
    表情
    emotemotemotemotemot
    emotemotemotemotemot
    emotemotemotemotemot
    emotemotemotemotemot
    emotemotemotemotemot
    打开HTML
    打开UBB
    打开表情
    隐藏
    记住我
    昵称   密码   游客无需密码
    网址   电邮   [注册]