Win32中的数据类型和标识符命名规范

数据类型

说明

BOOL

布尔变量,实际上是UINT

COLORREF

用作颜色索引的32位整数

DWORD

32位的无符号整数

HANDLE

32位的无符号整数,用作句柄

HINSTANCE

32位的无符号整数,用作实例句柄

HWND

32位的无符号整数,用作窗口句柄

HDC

一个设备描述背景的句柄

LONG

32位带符号整数

LPARAM

32位整数,用作窗口函数或者其他回调函数的参数之一

LPCSTR

指向一个字符串常量的32位指针

LPSTR

定义一个线性的32位字符串指针

LRESULT

32位整数,是窗口函数或者其他回调函数的返回值类型

UINT

定义一个新的Win32数据类型,它会把一个参数强制转换成Windows3.x应用中的16位值Win32应用中的32位值

WCHAR

声明一个16位的UNICODE字符,用来表示世界上所有已知的书写语言的符号

WORD

16位的无符号整数

WPARAM

32位整数,用作窗口函数或者其他回调函数的参数之一(Windows3.x中为16位值)

   


同时,为了统一变量的命名,在Windows中,不同类型的变量拥有各自的标准前缀,一般情况如表所示。不同数据类型的前缀

前缀

数据类型

c

字符(char)

s

短整数(short)

cb

用于定义对象(一般为一个结构)尺寸的整数

n

整数(integer)

sz

'/0'结尾的字符串

b

字节

f

BOOL

w

(WORD,无符号短整数)

l

长整数(LONG)

h

HANDLE(无符号整数)

m_

类成员变量

fn

函数(function)

dw

双字(DWORD,无符号长整数)

数据类型

说明

BOOL

布尔变量,实际上是UINT

COLORREF

用作颜色索引的32位整数

DWORD

32位的无符号整数

HANDLE

32位的无符号整数,用作句柄

HINSTANCE

32位的无符号整数,用作实例句柄

HWND

32位的无符号整数,用作窗口句柄

HDC

一个设备描述背景的句柄

LONG

32位带符号整数

LPARAM

32位整数,用作窗口函数或者其他回调函数的参数之一

LPCSTR

指向一个字符串常量的32位指针

LPSTR

定义一个线性的32位字符串指针

LRESULT

32位整数,是窗口函数或者其他回调函数的返回值类型

UINT

定义一个新的Win32数据类型,它会把一个参数强制转换成Windows3.x应用中的16位值Win32应用中的32位值

WCHAR

声明一个16位的UNICODE字符,用来表示世界上所有已知的书写语言的符号

WORD

16位的无符号整数

WPARAM

32位整数,用作窗口函数或者其他回调函数的参数之一(Windows3.x中为16位值)

   


同时,为了统一变量的命名,在Windows中,不同类型的变量拥有各自的标准前缀,一般情况如表所示。不同数据类型的前缀

前缀

数据类型

c

字符(char)

s

短整数(short)

cb

用于定义对象(一般为一个结构)尺寸的整数

n

整数(integer)

sz

'/0'结尾的字符串

b

字节

f

BOOL

w

(WORD,无符号短整数)

l

长整数(LONG)

h

HANDLE(无符号整数)

m_

类成员变量

fn

函数(function)

dw

双字(DWORD,无符号长整数)

 

学习过C语言的朋友们,应当对C语言数据类型非常熟悉,但C语言的数据类型有如下几个缺陷:

 

  1. 数据类型平台相关,在不同平台上,同一个数据类型可能占用不同的空间大小。典型的,在16位系统上,int类型和short int类型长度相同,但在32位平台上,则和long int类型长度相同;
  2. 数据类型过于单一,例如在表现数值和布尔这两种情况时,虽然它们都是32位长度,但分开表达显然更加方便和直观;
  3. 平台差异,例如__int64, long long, wchar_t, longptr_t这些类型,在不同的平台上可能定义的并不相同

 

为了解决这些问题,微软使用typedef关键字,为很多常用的C类型均定义了别名,这样一来,要解决源代码移植问题,只需在目标平台上定义相同的一套类型别名,即可解决大部分问题。

1  
2 #include<stdio.h>
3 #include<locale.h>
4 #include<windows.h>
5  
6 int_tmain(intargc,TCHAR*argv[])
7 {
8 //BOOL类型,它映射在int类型上,表示布尔逻辑。
9 //还有两个宏TRUE,映射为1,FALSE映射为0
10 BOOLbGood=TRUE;
11  
12 //CHAR类型,映射在char类型上
13 //表示一个字符,有符号8位整型
14 CHARcWord=0x7F;
15  
16 //BYTE类型,映射在unsignedchar类型上,
17 //表示一个无符号8位整型
18 BYTEucWord=0xFF;
19  
20 //SHORT类型,映射在short类型上,
21 //表示一个有符号16位整型
22 SHORTsNum=0x7FFF;
23  
24 //USHORT类型,映射在unsignedshort类型上,
25 //表示一个无符号16位整型
26 USHORTusNum=0xFFFF;
27  
28 //INT类型,映射在int类型上,
29 //表示一个有符号32位整型
30 INTnNum=0x7FFFFFFF;
31  
32 //UINT类型,映射在unsignedint类型上,
33 //表示一个无符号32位整型
34 UINTuNum=0xFFFFFFFF;
35  
36 //LONG类型,映射在long类型上,
37 //表示一个有符号32位整型
38 LONGlNum=nNum;
39  
40 //ULONG类型,映射在unsignedlong类型上,
41 //表示一个无符号32位整型
42 ULONGulNum=uNum;
43  
44 //UINT_PTR类型,即C中的uintptr_t类型,
45 //表示一个无符号32位整型,一般用来保存一个指针
46 UINT_PTRlpPtr=(UINT_PTR)_T("HelloWorld");
47  
48 //ULONG_PTR类型,即32位系统下的UINT_PTR类型
49 ULONG_PTRlpLptr=(ULONG_PTR)lpPtr;
50  
51 //LONGLONG类型,即C语言中的longlong类型,
52 //Win32定义为__int64,有符号64位整型
53 LONGLONGllBigValue=0x7FFFFFFFFFFFFFFF;
54  
55 //ULONGLONG类型,即C语言的unsignedlonglong类型,
56 //Win32定义为unsigned__int64,无符号64位整型
57 ULONGLONGullBigValue=0xFFFFFFFFFFFFFFFF;
58  
59 //WORD类型,字类型,映射在unsignedshort类型上,表示一个字
60 WORDwNum=usNum;
61  
62 //DWORD类型,双字类型,映射在unsignedlong类型上,表示两个字
63 DWORDdwNum=ulNum;
64  
65 //FLOAT类型,映射在float类型上,有符号32位浮点数,单精度浮点类型
66 FLOATfNum=123.123;
67  
68 //DOUBLE类型,映射在double类型上,有符号64位浮点数,双精度浮点类型
69 DOUBLEdNum=456.456;
70  
71 //WCHAR类型,映射在wchar_t类型上,表示一个UNICODE字符,无符号16位整型
72 WCHARwcWord=L'';
73  
74 //TCHAR类型,在定义了_UNICODE宏时,映射到wchar_t类型上,否则映射到char类型上
75 TCHARtcWord=_T('M');
76  
77  
78 //LPSTR类型,映射在char*类型上,表示一个指向字符串的指针
79 LPSTRlpszStr="HelloEveryone";
80  
81 //LPCSTR类型,映射在constnchar*类型上,表示一个指向字符串的不变指针
82 LPCSTRlpcszStr=lpszStr;
83  
84  
85 //LPWSTR类型,映射在wchar_t*类型上,表示一个指向UNICODE编码字符串的指针
86 LPWSTRlpwcStr=L"HelloEveryone";
87  
88 //nLPCWSTR类型,映射在constwchar_t*类型上,表示一个指向UNICODE编码字符串的不变指针
89 LPCWSTRlpcwcStr=lpwcStr;
90  
91 //LPTSTR类型,映射在TCHAR*类型上,根据是否定义_UNICODE宏,映射为LPSTR或LPWSTR
92 LPCTSTRlpcszTStr=lpszTStr;
93  
94 //LPCTSTR类型,映射在constTCHAR*类型上,根据是否定义_UNICODE宏,映射为LPCSTR或LPCWSTR
95 LPTSTRlpszTStr=_T("HelloEveryone");
96  
97 _tsetlocale(LC_ALL,_T("zhi"));
98  
99 _tprintf(_T("bGood值为:%s"),bGood==TRUE?_T("TRUE"):_T("FASLE"));
100 _tprintf(_T("\ncWord的值为:%d"),cWord);
101 _tprintf(_T("\nucWord的值为:%d"),ucWord);
102 _tprintf(_T("\nsNum的值为:%d"),sNum);
103 _tprintf(_T("\nusNum的值为:%d"),usNum);
104 _tprintf(_T("\nnNum的值为:%d"),nNum);
105 _tprintf(_T("\nuNum的值为:%u"),uNum);
106 _tprintf(_T("\nlNum的值为:%d"),lNum);
107 _tprintf(_T("\nulNum的值为:%u"),ulNum);
108 _tprintf(_T("\nlpPtr指向的内容为:%s"),lpPtr);
109 _tprintf(_T("\nlpLptr指向的内容为:%s"),lpLptr);
110  
111 //下面代码展示了如何使用printf输出64位整数
112 _tprintf(_T("\nllBigValue的值为:%lld"),llBigValue);
113  
114 //下面代码展示了如何使用printf输出64位无符号整数
115 _tprintf(_T("\nullBigValue的值为:%llu"),ullBigValue);
116  
117 _tprintf(_T("\nwNum的值为:%u"),wNum);
118 _tprintf(_T("\ndwNum的值为:%u"),dwNum);
119  
120 _tprintf(_T("\nfNum的值为:%f"),fNum);
121 _tprintf(_T("\ndNum的值为:%f"),dNum);
122  
123 //思考一下,这里为什么使用wprintf函数?
124 wprintf(L"\nwcWord的值为:%c",wcWord);
125  
126 //思考一下,这里tcWord变量的值可不可以是一个汉字?
127 _tprintf(_T("\ntcWord的值为:%c"),tcWord);
128  
129 printf("\nlpszStr的值为:%s",lpszStr);
130 printf("\nlpszStr的值为:%s",lpcszStr);
131  
132 wprintf(L"\nlpwcStr的值为:%s",lpwcStr);
133 wprintf(L"\nlpwcStr的值为:%s",lpcwcStr);
134  
135 _tprintf(_T("\nlpszTStr的值为:%s"),lpszTStr);
136 _tprintf(_T("\nlpcszTStr的值为:%s"),lpcszTStr);
137  
138 _tprintf(_T("\n"));
139 _tsystem(_T("pause"));
140 return0;
141 }

 

posted @ 2012-04-22 10:43  血马雄风  阅读(1304)  评论(0编辑  收藏  举报