C语言 —— int32_t uint32_t 及size_t

int32_t和int区别

我们都知道,C语言的基本类型就char, short, int 等。但是我们在看其他源码时经常碰到int32_t, int8_t这种形式的定义,他们是什么呢。其实他们就是基本类型的typedef重定义。
也就是不同平台下,使用以下名称可以保证固定长度。
1字节 int8_t —— char
2字节 int16_t —— short
4字节 int32_t —— int
8字节 int64_t —— long long

使用原因

那么为何要用重定义来代替基本类型呢?
有些数据类型的确切字节数依赖于程序是如何被编译的。
比如数据类型 long —般在 32 位程 序中为4字节 ,在 64 位程序中则为8字节也就是说不同编译器下long的大小可能不同。

为了避免由于依赖“典型”大小和不同编译器设置带来的奇怪 行为, ISO C99 引人了一类数据类型 , 其数据大小是固定的 ,不随编译器和机器设置而变化。其中就有数据类型比如int32_t 和 int64_t, 它们分别为 4 个字节和 8 个字节。使用确定大小的整数类型是我们准确控制数据表示的最佳途径。

stdint.h源码

/* There is some amount of overlap with <sys/types.h> as known by inet code */
#ifndef __int8_t_defined
# define __int8_t_defined
typedef signed char                int8_t;
typedef short int                int16_t;
typedef int                        int32_t;
# if __WORDSIZE == 64
typedef long int                int64_t;
# else
__extension__
typedef long long int                int64_t;
# endif
#endif

可以看到,头文件stdint.h, 中long类型在把不同机器下被赋予不同的长度以保证,不同机器下int64_t的大小相同。

int32_t和uint32_t的区别

一个是有符号一个无符号,也就是一个可以有负数,而一个没负数,可取的正数范围更大。
在这里插入图片描述

size_t

size_t主要用于计数,他就是一个unsinged int的重定义. 如sizeof函数返回值类型即为size_t。在不同位的机器中所占的位数也不同,size_t是无符号数

在不同机器中定义不同:

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

使用 size_t 来代替 int 或 unsigned 可以保证在同一个平台中,始终得到得到一个数据类型或变量的字节大小,保证了程序对该数据类型或变量的统计方式始终一致,不会因为平台的改变而出现错误

他的目的和int64_t一样,也是为了平台一致性,他可以接住任何数组的index,在不同平台上size_t的定义也不同

size_t is a type that can hold any array index.

Depending on the implementation, it can be any of:

unsigned char

unsigned short

unsigned int

unsigned long

unsigned long long

stdint.h源码

size_t 的声明是实现相关的。它出现在一个或多个标准头文件中,比如stdio.h 和stblib.h,典型的定义如下:


#ifndef __SIZE_T


#define __SIZE_T


typedef unsigned int size_t;


#endif

参考文档

https://blog.csdn.net/yz930618/article/details/84785970
https://blog.csdn.net/weixin_32780623/article/details/112583862
https://blog.csdn.net/qq_30866297/article/details/51465473?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2~default~CTRLIST~Rate-1.pc_relevant_antiscanv2&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2~default~CTRLIST~Rate-1.pc_relevant_antiscanv2&utm_relevant_index=1
https://is-cloud.blog.csdn.net/article/details/106131564?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1.pc_relevant_antiscanv2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1.pc_relevant_antiscanv2&utm_relevant_index=2

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Charles Ray

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值