【科普】在查看一些C语言编写的源码的时候,会遇到int8_t、int16_t、int32_t、int64_t、uint8_t、size_t、ssize_t都是什么意思

  • 作者: 凯哥Java(公众号:凯哥Java)
  • Redis
  • 时间:2023-01-09 09:18
  • 3659人已阅读
简介 在查看一些C语言编写的源码的时候,会遇到int8_t、int16_t、int32_t、int64_t、uint8_t、size_t、ssize_t都是什么意思?比如我们在查看Redis源码的时候,就会看到uint32_t

🔔🔔🔔好消息!好消息!🔔🔔🔔

有需要的朋友👉:联系凯哥 微信号 kaigejava2022

【科普】在查看一些C语言编写的源码的时候,会遇到int8_t、int16_t、int32_t、int64_t、uint8_t、size_t、ssize_t都是什么意思?比如我们在查看Redis源码的时候,就会看到uint32_t。请看下图中,Redis的intset源码中声明intset结构体的时候,几个属性,其中有unit32_t,int8_t都分别代表什么意思呢?

b35b523d8feb8e4dfa0b275c24c79c06.png

工作中经常碰到int8_t、int16_t、int32_t、int64_t、uint8_t、size_t、ssize_t等数据类型,所以有必要对此进行梳理。


int_t同类


int_t 为一个结构的标注,可以理解为type/typedef的缩写,表示它是通过typedef定义的,而不是一种新的数据类型。因为跨平台,不同的平台会有不同的字长,所以利用预编译和typedef可以最有效的维护代码。


int8_t : typedef signed char;

uint8_t : typedef unsigned char;

int16_t : typedef signed short ;

uint16_t : typedef unsigned short ;

int32_t : typedef signed int;

uint32_t : typedef unsigned int;

int64_t : typedef signed long long;

uint64_t : typedef unsigned long long;

ebc0c4711458f9e7bb8daaad63bc1c95.png

size_t与ssize_t


size_t主要用于计数,如sizeof函数返回值类型即为size_t。在不同位的机器中所占的位数也不同,size_t是无符号数,ssize_t是有符号数。


在32位机器中定义为:typedef unsigned int size_t; (4个字节)

在64位机器中定义为:typedef unsigned long size_t;(8个字节)

由于size_t是无符号数,因此,当变量有可能为负数时,必须使用ssize_t。因为当有符号整型和无符号整型进行运算时,有符号整型会先自动转化成无符号。

8279d8795a5ac72df5c59ac983a5e6c4.png

此外,int 无论在32位还是64位机器中,都是4个字节, 且带符号,可见size_t与int 的区别之处。


TopTop