在win中常见的数据类型
先谈
如常一样打开一个win32api的文档
在这里,可见参数的数据类型,有的名称较为复杂,虽然之前有过接触,但是对于这种数据类型的名称,总是记不清,因此记下这篇blog
先讲讲为什么这些数据类型会这样命名
常见命名规则
匈牙利命名法
基本原则是:变量名=属性+类型+对象描述。
匈牙利命名法关键是:标识符的名字以一个或者多个小写字母开头作为前缀;前缀之后的是首字母大写的一个单词或多个单词组合,该单词要指明变量的用途。
匈牙利命名法通过在变量名前面加上相应的小写字母的符号标识作为前缀,标识出变量的作用域,类型等。这些符号可以多个同时使用,顺序是先m_(成员变量),再指针,再简单数据类型,再其他。
匈牙利命名法中常用的小写字母的前缀:
前 缀 类 型
a 数组 (Array)
b 布尔值 (Boolean)
by 字节 (Byte)
c 有符号字符 (Char)
cb 无符号字符 (Char Byte,没有多少人用)
cr 颜色参考值 (ColorRef)
cx,cy 坐标差(长度 ShortInt)
dw Double Word
fn 函数
h Handle(句柄)
i 整型
l 长整型 (Long Int)
lp Long Pointer
m_ 类的成员
n 短整型 (Short Int)
np Near Pointer
p Pointer
s 字符串型
sz 以null做结尾的字符串型 (String with Zero End)
w Word
例如:
1 | int iCount; // 整数类型 |
- 小驼峰法(camel方法)变量一般用小驼峰法标识。
第一个单词以小写字母开始;第二个单词的首字母大写或每一个单词的首字母都采用大写字母
例如:
myFirstName
myLastName
大驼峰法(Pascal方法)常用于类名,函数名,属性,命名空间。
相比小驼峰法,大驼峰法把第一个单词的首字母也大写了。
例如:
public class DataBaseUser
下划线命名法
下划线命名法并不如大小驼峰式命名法那么备受推崇,但是也是浓墨重彩的一笔。尤其在宏定义
和常量中使用比较多,通过下划线来分割全部都是大写的单词。
该命名规范,也是很简单,要求单词与单词之间通过下划线连接即可。
例如:
int my_age;
char my_name[10];
float man_height;
下为例
虽然实际上的命名并不是完全按上面的规则来的,!但是!现实中的类型命名依旧可以靠上述原则来推断
比如开篇图中的LPCSTR
LPCTSTR的全写是 “Long Pointer to a Constant TCHAR String”。
其中各部分的含义如下:
“L”:表示这是一个长指针(long pointer),这是为了兼容 Windows 3.1 等 16 位操作系统遗留下来的,在 32 位及以上操作系统中,此 “长指针” 的概念主要是为了保持兼容性,实际意义不大。
“P”:代表这是一个指针(pointer)。
“C”:表示是一个常量(constant),即指向的字符串内容是不可修改的。
“T”:在 Win32 环境中,TCHAR是一个根据是否定义了UNICODE宏而自动切换为char(ANSI 编码)或wchar_t(Unicode 编码)的类型。
“STR”:表示这个变量是一个字符串(string)。
看看是不是符合匈牙利命名法的符号顺序
匈牙利命名法的符号先后顺序通常为:
对象描述:描述变量所代表的实际意义,例如 “EmployeeName” 中的 “Employee” 和 “Name”。
类型:用一个或几个字母表示变量的数据类型,例如 “iCount” 中的 “i” 表示整数类型(int),“strMessage” 中的 “str” 表示字符串类型等。
属性:可选的部分,用于表示变量的一些特殊属性,如 “p” 表示指针,“c” 表示常量等。例如 “lpwszFileName” 中的 “lp” 表示长指针,“wsz” 表示宽字符字符串类型,“FileName” 是对象描述。
所以LPCTSTR表示一个指向常量 TCHAR 字符串的指针。在程序中,如果定义了UNICODE宏,LPCTSTR 就等同于 const wchar_t;如果没有定义 UNICODE 宏,LPCTSTR 就等同于 const char。
汇总
以下是一些 Win32/C++ 中常用的数据类型:
整型类型
byte:8 位无符号整数,范围是 0 到 255。 short:16 位有符号整数,范围是 -32,768 到 32,767。 word:16 位无符号整数,等同于 unsigned short,范围是 0 到 65,535。 dword:32 位无符号整数,范围是 0 到 4,294,967,295,等同于 unsigned long。 long:32 位有符号整数,范围是 -2,147,483,648 到 2,147,483,647。 longlong:64 位有符号整数,范围是 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。 int_ptr:适用于指针或整数的有符号数据类型,其大小根据平台(32 位或 64 位)不同,常用于指针运算。 dword_ptr:适用于指针或整数的无符号数据类型,其大小根据平台(32 位或 64 位)不同
字符类型
char:8 位字符,通常用于 ASCII 字符 wchar_t:全写为"wide character type",16 位字符,通常用于 Unicode 字符(由编译器与平台定义,在windows上为16位) char16_t:16 位 Unicode 字符,通常用于存储 Unicode 字符(在C++11中引入,大小固定为 16 位) char32_t:32 位 Unicode 字符,通常用于存储 Unicode 字符 TCHAR:根据编译环境的设置(例如 _UNICODE 宏)可以是 char(ANSI 编码)或 wchar_t(Unicode 编码),用于编写可以在 ANSI 和 Unicode 模式下编译的代码
字符串指针类型
LPSTR:char*,一个指向以 null 结尾的 ANSI 字符数组指针。 LPCSTR:const char*,一个指向以 null 结尾的常量 ANSI 字符串的指针。 LPWSTR:wchar_t*,一个指向以 null 结尾的 Unicode 字符数组指针。 LPCWSTR:const wchar_t*,一个指向以 null 结尾的常量 Unicode 字符串的指针。 LPTSTR:如果定义了 UNICODE 或者其他相关的宏,就相当于 LPWSTR;否则就相当于 LPSTR。 LPCTSTR:如果定义了 UNICODE 或者其他相关的宏,就相当于 LPCWSTR;否则就相当于 LPCSTR。 LPVOID的英文全称为 “Long Pointer to Void”,在 windef.h 头文件中定义为 typedef void far *LPVOID。在现代的 32 位或 64 位操作系统中,可以将其理解为一个指向 void(无类型)的指针。这意味着它可以指向任意类型的数据,但在使用时需要根据实际情况进行类型转换。
“far” 关键字在早期的 Windows 编程中有特殊意义,用于表示远指针,与内存寻址相关,当时指针和长指针是有区别的。但在当前的平坦内存模型下,“far” 的实际意义已经不大。
布尔类型
bool:32 位布尔值,通常是 true 或 false。在 Windows API 中,bool 实际上是一个 32 位的整数类型,true 和 false 分别对应 1 和 0
句柄类型
HANDLE:通用的句柄类型,用于表示对象的引用,如文件、窗口、进程等。具体类型通常需要强制转换为正确的类型(如 HWND(窗口句柄)、HINSTANCE(实例句柄)等)
其他类型:
size_t:用于表示对象大小的类型,其大小根据平台(32 位或 64 位)不同 ssize_t:与 size_t 类似,但为有符号类型,用于表示可能为负的大小值。 COLORREF:unsigned long 类型,用于表示红、绿、蓝(RGB)值
- 标题: 在win中常见的数据类型
- 作者: 404joker404
- 创建于 : 2024-10-02 15:38:50
- 更新于 : 2024-10-05 21:32:56
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。