`
universsky
  • 浏览: 92213 次
文章分类
社区版块
存档分类
最新评论

匈牙利命名法 Camel 命名法 Pascal命名法 Linux内核风格

 
阅读更多
匈牙利命名法

匈牙利命名法是一种编程时的命名规范。基本原则是:变量名=属性+类型+对象描述,其中每一对象的名称都要求有明确含义,可以取对象名字全称或名字的一部分。命名要基于容易记忆容易理解的原则。保证名字的连贯性是非常重要的。   

举例来说,表单的名称为form,那么在匈牙利命名法中可以简写为frm,则当表单变量名称为Switchboard时,变量全称应该为frmSwitchboard。这样可以很容易从变量名看出Switchboard是一个表单,同样,如果此变量类型为标签,那么就应命名成lblSwitchboard。可以看出,匈牙利命名法非常便于记忆,而且使变量名非常清晰易懂,这样,增强了代码的可读性,方便各程序员之间相互交流代码。   

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

据说这种命名法是一位叫 Charles Simonyi 的匈牙利程序员发明的,后来他在微软呆了几年,于是 
这种命名法就通过微软的各种产品和文档资料向世界传播开了。现在,大部分程序员不管自己使用 
什么软件进行开发,或多或少都使用了这种命名法。这种命名法的出发点是把量名变按:属性+类型 
+对象 描述的顺序组合起来,以使程序员作变量时对变量的类型和其它属性有直观的了解,下面 
是HN变量命名规范,其中也有一些是我个人的偏向: 

属性部分 
全局变量 
g_ 
常量 
c_ 
c++类成员变量 
m_ 
静态变量 
s_ 

类型部分 
指针 
p 
函数 
fn 
无效 
v 
句柄 
h 
长整型 
l 
布尔 
b 
浮点型(有时也指文件) 
f 
双字 
dw 
字符串 
sz 
短整型 
n 
双精度浮点 
d 
计数 
c(通常用cnt) 
字符 
ch(通常用c) 
整型 
i(通常用n) 
字节 
by 
字 
w 
实型 
r 
无符号 
u 

描述部分 
最大 
Max 
最小 
Min 
初始化 
Init 
临时变量 
T(或Temp) 
源对象 
Src 
目的对象 
Dest 

这里顺便写几个例子: 
hwnd : h 是类型描述,表示句柄, wnd 是变量对象描述,表示窗口,所以 hwnd 表示窗口句柄; 
pfnEatApple : pfn 是类型描述,表示指向函数的指针, EatApple 是变量对象描述,所以它表示 
指向 EatApple 函数的函数指针变量。 
g_cch : g_ 是属性描述,表示全局变量,c 和 ch 分别是计数类型和字符类型,一起表示变量类 
型,这里忽略了对象描述,所以它表示一个对字符进行计数的全局变量。 
上面就是HN命名法的一般规则。 

小结:匈牙利命名法 

匈牙利命名法

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



CAMEL标志


Camel 命名法 :除第一个单词外,所有单词的首字母大写,其他字母小写
Pascal命名法:与Camel命名法相似,不过Pascal命名法是连第一个单词的首字母也要大写
所有的成员变量前加前缀"_"。例如在公共类DataBase中声明一个私有成员变量_connectionString。
接口的名称前加前缀“I”。例如常见一个公共接口Iconvertible。
方法的命名,一般将其命名为动宾短语。
所有的成员变量声明在类的顶端,用一个换行把它和方法分开
在C#中,以帕斯卡命名法和骆驼命名法居多。   C#中的编码惯例中,给公共成员变量(public)、受保护的成员变量(private)、或内部成员变量(internal)命名时,应使用帕斯卡命名法,如score、name、Status均为有效的成员变量名。” 不过我不喜欢。。 宋劲衫《linux C编程一站式学习》第132页中有这样一段: “2。内核编码风格规定变量、函数和类型采用全小写加下划线的方式命名,常量(比如宏定义和枚举常量)采用全大写加下划线的方式命名,比如上一节举例的函数名radix_tree_insert、类型名struct radix_tree_root、常量名RADIX_TREE_MAP_SHIFT等。微软发明了一种变量命名法叫匈牙利命名法(Hungarian notation),在变量名中用前缀表示类型,例如iCnt(i表示int)、pMsg(p表示pointer)、lpszText(lpsz表示long pointer to a zero-ended string)等。Linus在 [CodingStyle]中毫不客气地讽刺了这种写法:"Encoding the type of a function into the name (so-called Hungarian notation) is brain damaged - the compiler knows the types anyway and can check those, and it only confuses the programmer. No wonder MicroSoft makes buggy programs."代码风格本来就是一个很有争议的问题,如果你接受本章介绍的内核编码风格(也是本书所有范例代码的风格),就不要使用大小写混合的变量命名方式[19],更不要使用匈牙利命名法。”
分享到:
评论

相关推荐

    4种代码命名规范

    1.概述 代码的命名对于代码的可读性非常重要,目前有4种命名规范: 骆驼(Camel)、帕斯卡(pascal)、...匈牙利命名法 开头字母用变量类型的缩写,其余用变量的英文或英文的缩写,要求单词第一个字母大写 int iMyAg

    Transact-SQL编程规范

    SQL老师给我们学习的,希望喜欢的可以下来看 Transact-SQL编程规范 Transact-SQL编程规范 1 概述 3 1.1.基本原则 3 1.2.基本规范 3 命名规范 3 1.3.对象命名 4 1.3.1. 数据库 4 ...4.3.匈牙利命名法 18

    C#编程规范文档 详细

    第一章 概述 4 规范制定原则 4 术语定义 4 Pascal 大小写 4 Camel 大小写 4 文件命名组织 4 1.3.1文件命名 4 1.3.2文件注释 4 第二章 代码外观 6 2.1 列宽 6 2.2 换行 6 ...附录一: 匈牙利命名法 30

    C#编程规范

    第一章 概述 4 规范制定原则 4 术语定义 4 Pascal 大小写 4 Camel 大小写 4 文件命名组织 4 1.3.1文件命名 4 1.3.2文件注释 4 第二章 代码外观 6 2.1 列宽 6 2.2 换行 6 ...附录一: 匈牙利命名法 31

    C#编程规范 2.0 (CodePub)

    目录 第一章 概述 4 规范制定原则 4 术语定义 4 Pascal 大小写 4 Camel 大小写 4 文件命名组织 4 1.3.1文件命名 4 1.3.2文件注释 4 第二章 代码外观 6 2.1 列宽 6 2.2 换行 6 ...附录一: 匈牙利命名法 31

    C#代码规范 常用的代码编写规则

    C# 代码规范中列举了c#编程中所涉及的所以代码编写规范 第一章 概述 4 规范制定原则 4 术语定义 4 Pascal 大小写 4 Camel 大小写 4 文件命名组织 4 1.3.1文件命名 4 1.3.2文件注释 4 ...附录一: 匈牙利命名法 31

    公司C#编程规范

    1.1 规范制定原则 1. 方便代码的交流和维护。 2. 不影响编码的效率,不与大众习惯冲突。 3. 使代码更美观、阅读更...文件名遵从Pascal命名法,无特殊情况,扩展名小写。 使用统一而又通用的文件扩展名: C# 类 .cs

    你必须知道的JavaScript 变量命名规则详解

    匈牙利类型标记法在以 Pascal 标记法命名的变量前附加一个小写字母(或小写字母序列),说明该变量的类型。例如,i 表示整数,s 表示字符串,如下所示“ 代码如下:var iTestValue = 0, sSecondV

    C#编程规范--利安门禁编程规范

    一、概述 1.1规范制定原则 1 方便代码的交流和维护。 ...1 文件名遵从Pascal命名法,无特殊情况,扩展名小写。 2 使用统一而又通用的文件扩展名: C# 类 .cs 1.3.2文件注释 ................

    超全面的JavaScript开发规范(推荐)

    这篇文章主要介绍的是关于JS的命名规范、注释规范以及框架开发的一些问题,首先来看看目录。 目录 1. 命名规范:介绍变量、函数、常量、构造函数、类的成员等等的命名规范 ... ② Camel Case 小驼峰式命名法:

    《JavaScript高级程序设计》阅读笔记(一) ECMAScript基础

    变量命名规范: Camel标记法:首字母小写,接下来的单词都以大写字母开头。例如:var myTestValue=0,mySecondTestValue=”hi”; Pascal标记法:首字母大写,接下来的单词都以大写字母开头。例如:var MyTestValue=0...

    java查看sun包源码-Android-programming-specification:最全Android编程规范

    Pascal标记法 第1个字符大写,其后每个单词的第1个字母大写 camel标记法 第1个字符小写,其后每个单词的第1个字母大写 首先,命名总的原则是名称应该说明“什么”而不是“如何”, 从命名中可以直观看懂其定义和用途...

Global site tag (gtag.js) - Google Analytics