11.1.7 Windows程序中的符号
在许多Windows程序中,变量名的前缀都能够指出该变量容纳的数值类型以及该变量的用法。这样的前缀很多,而且经常组合使用。例如,前缀lpfn表示指向某个函数的long类型指针。我们可能遇到的部分前缀如表11-2所示。
表 11-2
|
前 缀
|
意 义
|
|
b
|
BOOL类型的逻辑变量,等价于int
|
|
by
|
unsigned char类型,占用一个字节
|
|
c
|
char类型
|
(续表)
|
前 缀
|
意 义
|
|
dw
|
DWORD类型,等价于unsigned long
|
|
fn
|
函数
|
|
h
|
用来引用某种对象的句柄
|
|
i
|
int类型
|
|
l
|
long类型
|
|
lp
|
long类型的指针
|
|
n
|
unsigned int类型
|
|
p
|
指针
|
|
s
|
字符串
|
|
sz
|
零终止的字符串
|
|
w
|
WORD类型,等价于unsigned short
|
这些前缀的这种用法称为匈牙利表示法。引入这种表示法的目的是为了最大限度地降低因为对变量的定义方法和预定用法有不同解释而误用变量的可能性。这样的误解在C++(www.cppentry.com)的前身-- C语言中是很容易发生的。使用C++(www.cppentry.com)及其强类型检查功能,不需要在表示法方面作出如此特殊的努力就能避免误解的问题。编译器总是将程序中的类型不一致性标记为错误,许多折磨早期C程序的此类错误在C++(www.cppentry.com)中都不可能发生。
另一方面,匈牙利表示法仍然有助于使程序更易于理解,尤其是在处理大量作为Windows API函数实参的不同类型变量的时候。因为Windows程序仍然是用C语言编写的,当然还因为Windows API函数的形参仍然是使用匈牙利表示法定义的,所以仍然十分广泛地使用这种方法。
我们可以自行决定希望在多大程度上使用匈牙利表示法,因为是否使用该表示法绝不是强制性的。可以选择完全不使用该表示法。但无论如何,如果能够了解该表示法的使用方法,那么将更易于理解Windows API函数参数的作用。但有一点需要说明,以防误解:随着Windows的不断发展,有些API函数参数的类型发生细小的变化,但使用的变量名仍然相同。因此,某些变量的前缀在指示变量类型方面可能不是完全正确。