我int32_t
最近在C程序中遇到了数据类型。我知道,它存储32位,但不要int
和int32
这样做?
另外,我想char
在程序中使用。我可以int8_t
代替使用吗?有什么区别?
总结一下:C中的int32,int,int32_t,int8和int8_t有什么区别?
我int32_t
最近在C程序中遇到了数据类型。我知道,它存储32位,但不要int
和int32
这样做?
另外,我想char
在程序中使用。我可以int8_t
代替使用吗?有什么区别?
总结一下:C中的int32,int,int32_t,int8和int8_t有什么区别?
Answers:
之间int32
和int32_t
,(同样地之间int8
和int8_t
)的区别很简单:C标准定义int8_t
和int32_t
,但不定义任何命名int8
或int32
-后者(如果它们都存在)可能是从一些其他的头或库(最有可能早于C99中的int8_t
和int32_t
)。
平原int
与其他地方有很大的不同。where int8_t
和int32_t
每个都有指定的大小,int
可以是大于等于16位的任何大小。在不同的时间,16位和32位是相当普遍的(对于64位实现,可能应该是64位)。
另一方面,int
保证在C的每个实现中都存在,int8_t
而int32_t
不是。但这是否对您很重要,值得怀疑。如果在小型嵌入式系统和/或较旧的编译器上使用C,则可能会出现问题。如果您主要将其与台式机/服务器计算机上的现代编译器一起使用,则可能不会。
糟糕-错过了有关的部分char
。int8_t
如果(且仅当)您希望保证整数类型的大小恰好为8位时,才使用char代替。如果要存储字符,则可能要使用char
。它的大小可以变化(就位数而言),但可以保证恰好是一个字节。不过,有一点奇怪:不能保证char
无格式是带符号的还是无符号的(许多编译器可以使它成为一个,取决于编译时标志)。如果需要确保其已签名或未签名,则需要明确指定。
请始终牢记,如果未明确指定“大小”是变量,则在声明时
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以获得更好的理解不是一件坏事。
typedef short INT16;
,而不是typedefs short INT16
。
bool_t
-以前从未听说过。C标准定义_Bool
为内置类型。bool
仅在您#include <stdbool.h>
(作为扩展为的宏_Bool
)时定义。