int32,int,int32_t,int8和int8_t之间的区别
我最近在C程序中遇到了int32_t
数据types。 我知道它存储32位,但不int
和int32
做相同?
另外,我想在程序中使用char
。 我可以使用int8_t
吗? 有什么不同?
总结: 在C中int32,int,int32_t,int8和int8_t有什么区别?
在int32
和int32_t
之间(同样在int8
和int8_t
之间),区别非常简单:C标准定义了int8_t
和int32_t
,但是没有定义任何名为int8
或int32
东西 – 后者(如果它们完全存在的话)可能来自一些其他的头文件或库(很可能在C99中添加int8_t
和int32_t
之前)。
Plain int
与其他的有些不同。 其中int8_t
和int32_t
均具有指定的大小, int
可以是大于等于16位的任何大小。 在不同的时间,16位和32位都是相当普遍的(对于64位实现,它应该是64位)。
另一方面, int
保证存在于C的每个实现中,其中int8_t
和int32_t
不是。 这可能是开放的问题,这是否对你很重要。 如果您在小型embedded式系统和/或较老的编译器上使用C,则可能会出现问题。 如果您主要在桌面/服务器机器上使用现代编译器,则可能不会。
糟糕 – 错过了关于char
的部分。 你会使用int8_t
而不是字符,如果(只有),如果你想一个整数types保证是正好8位的大小。 如果你想存储字符,你可能想用char
来代替。 它的大小可能会有所不同(以位数为单位),但保证只有一个字节。 但是有一点奇怪:不能保证一个简单的char
是有符号的还是无符号的(许多编译器可以根据编译时间标志来设置它)。 如果您需要确保它是有符号的还是无符号的,则需要明确指定。
_t数据types是stdint.h头文件中的typedeftypes,而int是构build的基本数据types。 这使得_t仅在stdint.h存在时才可用。 int另一方面保证存在。