匈牙利命名规则
来源:互联网 发布:爱布谷网络电视下载 编辑:程序博客网 时间:2024/05/13 02:19
几年以前,Charles Simonyi(他后来成为微软的著名程序员)设计了一种以前缀为基础的命名方法,这种方法后来称为"匈牙利表示法"以记念他.他的思想是根据每个标识符所代表的含义给它一个前缀.微软后来采用了这个思想,给每个标识符一个前缀以说明它的数据类型.因此,整型变量的前缀是n,长整型变量是nl,字符型数组变量是ca,以及字符串(以空类型结尾的字符数组)以sz为前缀.这些名字可能会非常古怪.比如说:lpszFoo表示"Foo"是一个指向以空字符为结尾的字符串的长整型指针.
这种方法的优点是使人能够通过变量的名字来辨别变量的类型,而不比去查找它的定义.遗憾的是,这种方法不仅使变量名字非常绕口,而且使改变变量类型的工作变得十分艰巨.在Windows3.1中,整型变量为16为宽.如果我们在开始时采用了一个整型变量,但是在通过30---40个函数的计算之后,发现采用整型变量宽度不够,这时我们不仅要改变这个变量的类型,而且要改变这个变量在这30--40个函数中的名字.
因为不切实际,除了一些顽固的Windows程序员外已经没有人再使用"匈牙利表示法"了.毫无疑问,在某种场合它依然存在,但大部分人现在已经抛弃它了.一般而言,输入前缀是一种糟糕的想法,因为它把变量于其类型紧紧地绑在了一起.
对于30行以下的函数,匈牙利方法一般有优势。
尤其是对界面编程,有优势。
但对于有强烈的算法要求、尤其是有很多抽象类型的C++程序,匈牙利方法简直是一个灾难。
看你用在什么地方。
现在有了很好的IDE工具,如:VC,SourceInsight等.
选中变量,会自动提示告诉你它的声明和定义,这样
匈牙利命名法就没有很大的必要了.
无非就是为了程序可读性较好.
实际上良好的代码书写习惯比强制使用匈牙利命名法更重要.
系统性。整体性。可读性。分类要清楚。要有注释!
匈牙利命名法是微软推广的一种关于变量、函数、对象、前缀、宏定义等各种类型的符号的命名规范。匈牙利命名法的主要思想是:在变量和函数名中加入前缀以增进人们对程序的理解。它是由微软内部的一个匈牙利人发起使用的,结果它在微软内部逐渐流行起来,并且推广给了全世界的Windows开发人员。下面将介绍匈牙利命名法,后面的例子里也会尽量遵守它和上面的代码风格。还是那句话,并不是要求所有的读者都要去遵守,但是希望读者作为一个现代的软件开发人员都去遵守它。
前缀类型中文说明aArray数组bBOOL(int)布尔(整数)byUnsigned Char(Byte)无符号字符(字节)cChar字符(字节)cbCount of Bytes字节数crColor Reference Value颜色(参考)值cxCount of x(Short)x的集合(短整数)fFlags(usually multiple bit values)标志(一般是有多位的数值)fnFunction函数g_Global全局的hHandle句柄iInteger整数lLong长整数lpLong Pointer长指针m_Data Member of a Class一个类的数据成员nShort Integer短整数pPointer指针sString字符串szZero Terminated String以零结尾的字符串tmText Metric文本规则uUnsigned Integer无符号整数ulUnsigned Long(ULONG)无符号长整数wWORD(Unsigned Short)无符号短整数x,yx, y Coordinates (Short)坐标值(短整数)vVoid空有关项目的全局变量用g_开始,类成员变量用m_,局部变量若函数较大则可考虑用l_用以显示说明其是局部变量。
前缀类型例子g_全局变量g_ServersC类或者结构体CDocument, CPrintInfom_成员变量m_pDoc, m_nCustomersVC常用前缀列表:
MFC、句柄、控件及结构的命名规范:
一般前缀命名规范:
变量命名规范:
应用程序符号命名规范
Microsoft MFC宏命名规范:
库标识符命名法:
静态库版本命名规范:
动态连接库命名规范:
Windows.h中新的命名规范:
MSDN中给出了一段遵守代码风格和匈牙利命名法的代码参考如下:
1 #include "sy.h" 2 extern int *rgwDic; 3 extern int bsyMac; 4 struct SY *PsySz(char sz[]) 5 { 6 char *pch; 7 int cch; 8 struct SY *psy, *PsyCreate(); 9 int *pbsy; 10 int cwSz; 11 unsigned wHash=0; 12 pch=sz; 13 while (*pch!=0) 14 wHash=wHash<>11+*pch++; 15 cch=pch-sz; 16 pbsy=&rgbsyHash[(wHash&077777)%cwHash]; 17 for (; *pbsy!=0; pbsy = &psy->bsyNext) 18 { 19 char *szSy; 20 szSy= (psy=(struct SY*)&rgwDic[*pbsy])->sz; 21 pch=sz; 22 while (*pch==*szSy++) 23 { 24 if (*pch++==0) 25 return (psy); 26 } 27 } 28 cwSz=0; 29 if (cch>=2) 30 cwSz=cch-2/sizeof(int)+1; 31 *pbsy=(int *)(psy=PsyCreate(cwSY+cwSz))-rgwDic; 32 Zero((int *)psy,cwSY); 33 bltbyte(sz, psy->sz, cch+1); 34 return(psy); 35 }
- 匈牙利命名规则
- 匈牙利命名规则
- 匈牙利命名规则
- 匈牙利命名规则(转载)
- 匈牙利命名规则
- 匈牙利命名规则
- 匈牙利编程命名规则
- 匈牙利命名规则
- 匈牙利命名规则
- 匈牙利命名规则
- 匈牙利命名规则
- 变量命名规则------匈牙利命名规则
- 变量命名规则------匈牙利命名规则!
- 变量命名规则------匈牙利命名规则
- 变量命名规则------匈牙利命名规则
- 变量命名规则------匈牙利命名规则
- VC编程命名规则---[ 匈牙利命名法]
- C# 命名规则(匈牙利命名法)
- 【框架-MFC】系统登陆、‘远程控制切换用户消息 WM_WTSSESSION_CHANGE
- ListView中item只能选择一项的做法,ListView与radioButton结合使用
- 《增广贤文》
- firefox omFileUpload flash http error 302
- vc static扩大,缩小效果
- 匈牙利命名规则
- #available标注进行多版本兼容性支持
- java.lang.NoClassDefFoundError:org/bouncycastle/jce/provider/BouncyCastleProvider
- JsonToMap and getMapFromStrToMap
- ASP.NET MVC ,WebAPI 自定义Basic授权方式
- Bootstrap3 左边距
- [实践]微信公众平台开发方法汇总(php)
- #JQurey 插件模型探讨 持续更行中#
- Android手机装不上软件的问题解决