编码约定
数据类型
在 Win32 的程序中,你可能会看到很多完全不知道是什么的数据类型。下面就为大家简单讲解一下。
BOOL
Win32 中,不会使用 bool,而是将 int 定义为 BOOL,这时,所有非 \(0\) 值都被认为是假。WinDef.h 定义了 TRUE 等于 \(1\),FALSE 等于 \(0\)。但在判断一个 BOOL 值是否为真时,我们不应使用 if (x == TRUE),而使用 if (x != FALSE)。
指针
如果一个数据类型以 P 或 LP 开头,就是一个指针类型。对于现在来说,这两者没有区别。MSDN 告诉我们「应避免使用这些前缀,如果必须使用一个,则使用 P」。
字符串
在 Win32 中,因为有 ANSI 和 Unicode 两种编码方式,所以为了方便写程序,它定义了一些字符的数据类型。
| 定义的类型 | 实际的类型 |
|---|---|
CHAR |
char |
WCHAR |
wchar_t |
TCHAR |
ANSI 中定义为 char,Unicode 中定义为 wchar_t |
PSTR 或 LPSTR |
char* |
PCSTR 或 LPCSTR |
const char* |
PWSTR 或 LPWSTR |
wchar_t* |
PCWSTR 或 LPCWSTR |
const wchar_t* |
PTSTR 或 LPTSTR |
ANSI 中定义为 char*,Unicode 中定义为 wchar_t* |
PCTSTR 或 LPCTSTR |
ANSI 中定义为 const char*,Unicode 中定义为 const wchar_t* |
由此可见,在使用时可直接使用 TCHAR、PTSTR、PCTSTR,即可避免出现编码混乱的问题。
对于没有介绍的数据类型,可能是不重要的数据类型,也可能是结构体,这时就需要查询 MSDN 来了解这种数据结构。
匈牙利命名法
Win32 中用到了很多使用匈牙利命名法的变量。匈牙利命名法的规则是将变量名命名为属性+类型+描述。关于常见的前缀可以看 MSDN。其实是我懒得抄上来