匈牙利命名法是Windows程序开发时经常用到/见到的变量/类型命名方法。
例如:下面是winsock2.h
中的一个函数的文档:
1 | INT WSAAPI WSAAddressToStringW( |
显然,变量名(类型名)具有某中规律,但:lpsz是什么?LPWSTR又是什么类型?DWORD和LPDWORD有什么区别?可以通过学习匈牙利命名法快速解决这些问题;
- 匈牙利命名法分为“匈牙利应用命名法”和“系统匈牙利命名法”两种,可同时使用;
- 由 其他前缀(前前缀) + 匈牙利命名法前缀 + 实际变量/类名 组成;
- 大小写规则(不是必须的):
- 类(数据类型)的匈牙利命名法前缀大写,类名大写;也即:全部大写;例如:
LPWSTR
; - 变量(对象)的匈牙利命名法前缀小写,变量名只有首字母大写;例如:
lpwStr
;
- 类(数据类型)的匈牙利命名法前缀大写,类名大写;也即:全部大写;例如:
- 不同程序项目中的前缀的含义不一定相同,但同一个项目中的前缀含义一定相同
- 即:弄懂一个前缀的意思,就能快速了解其他变量或类的类型/特征
系统匈牙利命名法
- 匈牙利命名法的前缀 标识的是数据类型
- 基础类型
i
:int
,整型u
:unsigned
,无符号的b
:bool
,布尔型l
:long
,长的v
:void
,空类型n
:number,即short
,短整型f
、fp
:float
,单精度浮点数d
、db
:double
,双精度浮点数c
、ch
:char
,字符型uc
、cb
(char byte):无符号字符型p
:pointer
,指针np
:near pointer
,近程指针fn
:function
,函数fs
:file stream
,文件流k
:const
,常量e
:enum
,枚举类型- ……
- 有时可以在类型后加数字,代表类型的位数,如:16位无符号整形
ui16
- 其他类型
s
:string
,字符串sz
:string (with) zero (endings)
,以\0
结尾的字符串a
、rg
:range,即array
,数组by
:byte
,字节w
:word
,字dw
:double word
,双字qw
:quarter word
,四字S
:struct
,结构体C
:Class
,类I
:Interface
,接口X
:Nested Class
,嵌套的类x
:Instance of nested class
,嵌套的类的实例
1 | // CRocket:类 |
- Windows API中能够见到许多独特的前缀
h
:handle
,句柄sa
:Socket Address
,Socket地址- ……
- 常见的前前缀
g_
:global
,全局变量m_
:member
,类的成员变量s_
:static
,静态变量- ……
匈牙利应用命名法
- 匈牙利命名法的前缀 标识的是变量特征或用处
- 一些前缀的例子
ct
:counter
,计数器cb
:count (of) bytes
,字节数i
:index
,下标w
:wide
,宽字符row
:row
,行号col
:column
,列号d
:distance
,距离us
:unsafe string
,不安全的字符串- ……