QT C++开发套路之:重定义基础数据类型

(1)前言

对于C/C++,几乎每个系统都会重定义(typedef)基础数据类型。
(QT在qglobal.h中,MSVS在minwindef.h)。
其目的是为了方便代码的迁移(在各种环境之间)。
另外,也是为了掌控数据类型的容量,不至于溢出了还不知道。

(2)环境

Qt 5.15 LTS,编译工具 MSVS / MinGW,CPU架构 32 / 64 bits。

(3)基础数据类型定义

以下是基础数据类型重定义的片段:

//(1.1) 无符号类型(按简写)
typedef unsigned char       uchar;      //char
typedef unsigned short      ushort;     //short
typedef unsigned int        uint;       //int
typedef unsigned long       ulong;      //long
typedef unsigned long long  ulonglong;  //long long

//(1.2) 无符号类型(按所占位数)
typedef uchar       uint8;      //8bits
typedef ushort      uint16;     //16bits
typedef ulong       uint32;     //32bits
typedef ulonglong   uint64;     //64bits

//(1.3) 无符号类型(按名称)
typedef uint8       BYTE;
typedef uint16      WORD;
typedef uint32      DWORD;      //Dual-word, 32 bits
typedef uint64      QWORD;      //Quad-word, 64 bits

//(2.1) 有符号类型(按简写)
//typedef signed int        int;        //int
typedef signed long long    longlong;   //long long

//(2.2) 有符号类型(按所占位数)
typedef signed char     int8;   //8bits
typedef signed short    int16;  //16bits
typedef signed long     int32;  //32bits
typedef longlong        int64;  //64bits

其中可以看出一些迷惑:无处安放的 int 和 万金油 long。
例如:uint32 用的是 ulong 而不是 uint,int32 用的是 long 而不是 int

(3.1)定义的依据

实际上,定义的依据(拍脑袋)无非有以下几点:

  • C++标准、惯用法(例如:DWORD 只能是32 bits,而不能用64 bits)
  • 主流环境(OS/CPU/编译器,例如:可不考虑 16 bits 环境)
  • 应用考量(宁大勿小防溢出,例如:能用 long 不用 int,能用 int64 不用 int32)
(3.2)定义的验证

以下是在 MSVS/MinGW,32/64 bits,debug/release 模式下运行输出结果:

Size(bits) of uchar/uint8/BYTE =  8
Size(bits) of ushort/uint16/WORD =  16
Size(bits) of unsigned int =  32
Size(bits) of ulong/uint32/DWORD =  32
Size(bits) of ulonglong/uint64/QWORD =  64
Size(bits) of char/int8 =  8
Size(bits) of short/int16 =  16
Size(bits) of signed int =  32
Size(bits) of int =  32
Size(bits) of long/int32 =  32
Size(bits) of longlong/int64 =  64

基本符合预期。

(4)结语

重定义基础数据类型是一个老话题。
但也也暗藏玄机,知其然(WHAT)和知其所以然(WHY)还是很有必要的。
GOOD LUCK!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值