打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

2023.10.18 湖北

关注

(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!

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
STM32的变量定义(搞通STM32必须要理解透,这是基础)
字长与平台无关的整型数据类型 - Tommy的技术博客 - C++博客
Keil MDK编译器的数据类型定义
Windows API教程(一) Window API 概要
size_t,ssize_t,int,long的区别
基本数据类型
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服