int32_t和int区别
使用原因
为了避免由于依赖“典型”大小和不同编译器设置带来的奇怪 行为, ISO C99 引人了一类数据类型 , 其数据大小是固定的 ,不随编译器和机器设置而变化。其中就有数据类型比如int32_t 和 int64_t, 它们分别为 4 个字节和 8 个字节。使用确定大小的整数类型是我们准确控制数据表示的最佳途径。
stdint.h源码
/* There is some amount of overlap with
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是无符号数
在不同机器中定义不同:
使用 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://javaforall.net/219927.html原文链接:https://javaforall.net
