我是靠谱客的博主 拉长外套,最近开发中收集的这篇文章主要介绍匈牙利命名法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 变量(还包括宏)的命名规则,比较系统和彻底的有 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

 

最后

以上就是拉长外套为你收集整理的匈牙利命名法的全部内容,希望文章能够帮你解决匈牙利命名法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部