繁体   English   中英

int32,int,int32_t,int8和int8_t之间的区别

[英]Difference between int32, int, int32_t, int8 and int8_t

我最近在C程序中遇到了数据类型int32_t 我知道它存储32位,但不是intint32做同样的事情?

另外,我想在程序中使用char 我可以使用int8_t吗? 有什么不同?

总结一下: C中的int32,int,int32_t,int8和int8_t有什么区别?

int32int32_t之间,(同样在int8int8_t之间)差别非常简单:C标准定义了int8_tint32_t ,但没有定义任何名为int8int32东西 - 后者(如果它们一直存在)可能来自一些其他的头或库(很可能早于在C99中添加int8_tint32_t )。

Plain int与其他人有很大的不同。 其中int8_tint32_t各自具有指定的大小, int可以是任何大小> = 16位。 在不同的时间,16位和32位都相当普遍(对于64位实现,它应该是64位)。

另一方面, int保证在C的每个实现中都存在,其中int8_tint32_t不是。 尽管如此,这对您是否重要仍有待商榷。 如果在小型嵌入式系统和/或较旧的编译器上使用C,则可能存在问题。 如果您主要使用桌面/服务器计算机上的现代编译器,它可能不会。

哎呀 - 错过了关于char的部分。 如果(并且仅当)您希望保证整数类型的大小恰好为8位,则使用int8_t而不是char。 如果要存储字符,可能需要使用char 它的大小可以变化(就位数而言)但它保证恰好是一个字节。 虽然有点奇怪:无法保证普通char是有符号还是无符号(并且许多编译器可以将其设置为一个,具体取决于编译时标志)。 如果您需要确保其已签名或未签名,则需要明确指定。

_t数据类型是stdint.h头文件中的typedef类型,而int是构建的基本数据类型。 这使得_t仅在stdint.h存在时可用。 另一方面,int保证存在。

请记住,如果没有明确指定,'size'是可变的,所以如果你声明的话

 int i = 10;

在某些系统上,它可能会导致编译器产生16位整数,而在某些系统上则可能导致32位整数(或更新系统上的64位整数)。

在嵌入式环境中,这可能会导致奇怪的结果(特别是在处理内存映射I / O时或者可能考虑简单的数组情况),因此强烈建议指定固定大小的变量。 在遗留系统中,您可能会遇到

 typedef short INT16;
 typedef int INT32;
 typedef long INT64; 

从C99开始,设计人员添加了stdint.h头文件,该文件基本上利用了类似的typedef。

在基于Windows的系统上,您可能会在stdin.h头文件中看到条目为

 typedef signed char       int8_t;
 typedef signed short      int16_t;
 typedef signed int        int32_t;
 typedef unsigned char     uint8_t;

对于最小宽度整数或精确宽度整数类型,我认为探索stdint.h以获得更好的理解并不是一件坏事。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM