(u)int8_t、(u)int16_t、(u)int32_t、(u)int64_t、size_t、ssize_t区别

文章讲述了在不同平台环境下,为了实现代码的跨平台兼容性,如何使用typedef定义(int_u)int8_t,(u)int16_t,(u)int32_t,(u)int64_t等数据类型。同时,介绍了size_t用于计数,例如sizeof函数返回值,并强调在负数可能存在的场景下应使用ssize_t。在不同位宽的系统中,size_t和ssize_t的数据宽度也会变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(u)int8_t、(u)int16_t、(u)int32_t、(u)int64_t

# types.h
typedef signed char __int8_t;
typedef unsigned char __uint8_t;
typedef signed short int __int16_t;
typedef unsigned short int __uint16_t;
typedef signed int __int32_t;
typedef unsigned int __uint32_t;
#if __WORDSIZE == 64
typedef signed long int __int64_t;
typedef unsigned long int __uint64_t;

# stdint-intn.h
typedef __int8_t int8_t;
typedef __int16_t int16_t;
typedef __int32_t int32_t;
typedef __int64_t int64_t;

# stdint-uintn.h
typedef __uint8_t uint8_t;
typedef __uint16_t uint16_t;
typedef __uint32_t uint32_t;
typedef __uint64_t uint64_t;

int_t 是通过typedef定义的,而不是其它数据类型。
因为跨平台,不同的平台会有不同的字长,所以利用预编译和typedef可以最有效的维护代码。

  • 16位平台
类型bitsbytes
char81
short162
int162
long324
  • 32位平台
类型bitsbytes
char81
short162
int324
long324
longlong648
  • 64位平台
类型bitsbytes
char81
short162
int324
long648
longlong648
  • int_t和数据类型的关系
int_t类型bitsbytes
int8_t/uint8_tchar81
int16_t/uint16_tshort162
int32_t/uint32_tint324
int64_t/uint64_tlong648
int64_t/uint64_tlonglong648

size_t和ssize_t

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

  1. 在32位机器中定义为:typedef unsigned int size_t; (4个字节)
  2. 在64位机器中定义为:typedef unsigned long size_t;(8个字节)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值