常见数据类型如下:(数据类型一般大小写都可以,有宏定义)
类型 名称 占用字节数 取值范围
BYTE 字节类型 1 0-255
CHAR 字节类型 1 -128-127
WCHAR 宽字符类型 2 -32768-32767
short 短整类型 2 -32768-32767
Fixed Precision
Fixed-precision data types are the same length in both 32- and 64-bit Windows. To help you remember this, their precision is part of the name of the data type. The following are the fixed-precision data types。
Term | Description |
DWORD32 | 32-bit unsigned integer |
DWORD64 | 64-bit unsigned integer |
INT32 | 32-bit signed integer |
INT64 | 64-bit signed integer |
LONG32 | 32-bit signed integer |
LONG64 | 64-bit signed integer |
UINT32 | Unsigned INT32 |
UINT64 | Unsigned INT64 |
ULONG32 | Unsigned LONG32 |
ULONG64 | Unsigned LONG64 |
typedef unsigned int UINT;
typedef unsigned int UINT32;
typedef signed int INT32;
typedef unsigned long DWORD;
typedef unsigned short WORD;
下面再介绍2个很重要的,经常被使用到的,无处不在的数据类型WPARAM,LPARAM
先看看他们定义吧
typedef LONG_PTR LPARAM;
typedef UINT_PTR WPARAM;
先告诉你,这2个数据类型很重要,不是危言耸听,以后你写SDK程序就知道了,看他们的定义如上,有些迷糊? 别,我们一步一步分析,我们分析LPARAM。首先定义LPARAM 为LONG_PTR也就是用LPARAM的地方也就可以写成LONG_PTR,LONG_PTR又是被定义成什么的呢?
typedef long LONG_PTR;
看到了吗? 也就是long 所以归根结底,LPARAM 就是long型,所有LPARAM型的变量,你都可以直接使用long数据类型代替。不过不推荐这样,至于为什么,各位思考思考呢~~
以上这些数据类型是参考MSDN中的说明,或者可以查看WinDef.h这个头文件查看这些Windows数据类型的定义,那么也请各位自己推推看LARAM和WPARAM的真面目吧~
各位朋友在推导的过程中可能发现LONG_PTR的定义是这样写的
#if defined(_WIN64)
typedef __int64 LONG_PTR;
#else
typedef long LONG_PTR;
#endif
这是什么意思呢,能看懂英文都能知道这在定义些什么,如果定义了 _WIN64这个宏 那么就定义 LONG_PTR 为 __int64,否则定义LONG_PTR为long。 很简单吧 也就是说如果_WIN64这个宏在前面被定义了,那么这里的LONG_PTR就被定义为__int64这个在64位编程下的数据类型,否则就定义为long型,这样说应该比较好理解了吧。在这里,各位就不必深究__int64了, 在目前的主流32位编程下很少使用它啦。理解就ok了。这样定义是微软为了程序员编写的程序能在32位与64位下都能编译而采用的伎俩。
有关这些Windows的数据类型,想查看他们的真面目,其实很简单,在VC6.0,VS2008 这些集成开发环境里面,你只需要在一个数据类型上面点击右键,在弹出菜单中选择‘Goto Defination’ 或者是 ‘查看定义’就可以看到了,如果看到的还不是最终面目,在继续上面步骤。直到看到它的本质数据类型为止。通过这样,新手对于Windows的这些复杂的数据类型定义也就有了根本的认识,不再是迷迷糊糊,在以后的编程中也就不会出现不知道用哪种数据类型或者哪些数据类型之间可以相互转换的情况了。不过还需要多多观察与练习才是啊~~
下面再来看一看windows中定义的一些宏
#define VOID void
#define CONST const
2个最简单的宏,也是只变成大写而已,难道又是为了方便程序员不切换输入法?还真的人性化呀。
LPSTR:字符指针,也就是字符串变量
LPCSTR:字符串常量
LPCWSTR:UNICODE字符串常量
LPCTSTR:根据环境配置,如果定义了UNICODE宏,则是LPCWSTR类型,否则则为LPCSTR类型
#ifdef UNICODE
typedef LPCWSTR LPCTSTR;
#else
typedef LPCSTR LPCTSTR;
#endif
Unicode类型定义的关键字为未插入,使用如下:
wchar c,s[100]; //变量定义方法
c=_T('a'); //_T()是一个宏,用来将字符串常量转换为unicode类型