变量命名规则------匈牙利命名规则
来源:互联网 发布:软件设计师考试难吗 编辑:程序博客网 时间:2024/06/03 15:57
给程序中的每一个变量起一个好听,好看得名字,那也是一种美,所以再次摘录下来,留着参考,同时,方便有需要的朋友。
几年以前,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 }
- 变量命名规则------匈牙利命名规则
- 变量命名规则------匈牙利命名规则!
- 变量命名规则------匈牙利命名规则
- 变量命名规则------匈牙利命名规则
- 变量命名规则------匈牙利命名规则
- JavaScript变量命名规则:匈牙利命名法
- JavaScript变量命名规则:匈牙利命名法
- 变量命名规则-匈牙利表示法
- 匈牙利命名规则
- 匈牙利命名规则
- 匈牙利命名规则
- 匈牙利命名规则(转载)
- 匈牙利命名规则
- 匈牙利命名规则
- 匈牙利编程命名规则
- 匈牙利命名规则
- 匈牙利命名规则
- 匈牙利命名规则
- ASP.NET简单问题收集
- Hibernate面试题
- socket和IOCTL结合实现网络采集
- Thinkpad 海外直购
- linux下批量修改文件名
- 变量命名规则------匈牙利命名规则
- NSInvocation简单使用
- qt对话框不在任务栏显示
- ExtJs4_AdvancedValidation示例;
- 对泛型集合进行筛选
- 在insert中使用子查询
- android 分享
- 从 Java 档案 (JAR) 中读取文件
- [转]烦人的BeforePropertie----BeforeProperties,AfterProperties,properties.ListItem