1、第08讲 匈牙利命名法一、匈牙利命名法匈牙利命名法计算机程序设计中的一种命名规则,用这种方法命名的变量显示了其数据类型。匈牙利命名法有两种:系统匈牙利命名法和匈牙利应用命名法。匈牙利命名法被设计成语言独立的,并且首次在BCPL语言中被大量使用。由于BCPL只有机器字这一种数据类型,因此这种语言本身无法帮助程序员来记住变量的类型。匈牙利命名法通过明确每个变量的数据类型来解决这个问题。在匈牙利命名法中,一个变量名由n个小写字母开始,这些字母有助于记忆变量的类型和用处,紧跟着的就是程序员选择的任何名称。这个后半部分的首字母可以大写以区别前面的类型指示字母(参见驼峰式大小写)。二、系统匈牙利命名法与匈
2、牙利应用命名法1、系统命名法与应用命名法的区别在于前缀的目的在系统匈牙利命名法中,前缀代表了变量的实际数据类型。例如:lAccountNum : 变量是一个长整型 (l); arru8NumberList : 变量是一个无符号8位整型数组 (arru8); szName : 变量是一个零结束字符串 (sz),这是西蒙尼最开始建议的前缀之一。 匈牙利应用命名法不表示实际数据类型,而是给出了变量目的的提示,或者说它代表了什么。rwPosition : 变量代表一个行 (rw)。 usName : 变量代表一个非安全字符串 (us),需要在使用前处理。 strName : 变量代表一个包含名字的字符
3、串(str)但是没有指明这个字符串是如何实现的。 2、西蒙尼建议的大多数前缀都是自然语义的,但不是所有由于这种命名法通常使用小写字母开头用来助记,但是并没有对助记符本身作规定。有几种被广泛使用的习惯(见下面的示例),但是任意字母组合都可以被使用,只要它们在代码主体中保持一致就可以了。在使用匈牙利系统命名法的代码中有时候也可能包含系统匈牙利命名法,即在描述被单独以类型方式定义的变量时使用。3、示例(有几种被广泛使用的习惯)a Array 数组 b BOOL (int) 布尔(整数) by Unsigned Char (Byte) 无符号字符(字节) c Char 字符(字节) cb Count
4、of bytes 字节数 cr Color reference value 颜色(参考)值 cx Count of x (Short) x的集合(短整数) dw DWORD (unsigned long) 双字(无符号长整数) f Flags (usually multiple bit values) 标志(一般是有多位的数值) fn Function 函数 g_ global 全局的 h Handle 句柄 i Integer 整数 l Long 长整数 lp Long pointer 长指针 m_ Data member of a class 一个类的数据成员 n Short int 短整
5、数 p Pointer 指针 s String 字符串 sz Zero terminated String 以0结尾的字符串 tm Text metric 文本规则 u Unsigned int 无符号整数 ul Unsigned long (ULONG) 无符号长整数 w WORD (unsigned short) 无符号短整数 x,y x, y coordinates (short) 坐标值/短整数 v void 空VC常用前缀列表: 前缀类型 描述 例子chchar 8位字符 chGradechTCHAR 16位UNICODE类型字符 chNamebBOOL 布尔变量 bEnabledn
6、 int 整型(其大小由操作系统决定) nLengthn UINT 无符号整型(其大小由操作系统决定) nLengthw WORD 16位无符号整型 wPosl LONG 32位有符号整型 lOffsetdw DWORD 32位无符号整型 dwRangep * Ambient memory model pointer 内存模块指针, pDoc指针变量 lp FAR* 长指针 lpDoclpszLPSTR32位字符串指针 lpszNamelpszLPCSTR32位常量字符串指针 lpszNamelpszLPCTSTR32位UNICODE类型常量指针 lpszNameh handleWindows
7、对象句柄 hWndlpfn(*fn)()回调函数指针 Callback Far pointer to lpfnAbort CALLBACK function库标识符命名法 标识符值和含义uANSI(N)或Unicode(U)d调试或发行:D = 调试;忽略标识符为发行 三、系统匈牙利命名法的优点(一些只适用于系统匈牙利命名法)支持者声称匈牙利命名法的好处包括:1、从名字中就可以看出变量的类型 2、拥有类似语义的多个变量可以在一个代码块中使用:dwWidth, iWidth, fWidth, dWidth 3、变量名在仅仅知道他们的类型时可以被轻易记住 4、可以使变量名更加一致 5、决定一个变量名的时候可以更机械化,更快 6、不合适的类型转换和操作可以在阅读代码的时候被检测出来