GCC 中有固定大小的整数吗?

Posted

技术标签:

【中文标题】GCC 中有固定大小的整数吗?【英文标题】:Are there fixed size integers in GCC? 【发布时间】:2010-09-21 03:23:59 【问题描述】:

在 MSVC++ 编译器上,可以使用 __int8__int16__int32 和类似类型来处理具有特定大小的整数。这对于需要使用自定义文件格式、硬件控制数据结构等低级数据结构的应用程序非常有用。

我可以在 GCC 编译器上使用类似的等效项吗?

【问题讨论】:

【参考方案1】:

ISO 标准 C,从 C99 标准开始,添加定义这些的标准头 <stdint.h>

uint8_t  - unsigned 8 bit
int8_t   - signed 8 bit
uint16_t - unsigned 16 bit
int16_t  - signed 16 bit
uint32_t - unsigned 32 bit
int32_t  - signed 32 bit
uint64_t - unsigned 64 bit
int64_t  - signed 64 bit

我一直使用这些类型。

仅当实现支持具有适当大小和特征的预定义类型时才定义这些类型(大多数都支持)。

<stdint.h> 还定义了名称形式为(u)int_leastN_t(具有至少指定宽度的类型)和(u)int_fastN_t(具有至少指定宽度的“最快”类型宽度);这些类型是强制性的。

如果您使用的是不支持<stdint.h> 的旧实现,您可以自己滚动;一种实现是Doug Gwyn's "q8"。

【讨论】:

stdint.h 也是 C99 的一部分,因此它不再是特定于 posix 的。 我明白了。我依稀记得看到一个编译器属性做类似的事情...... 我记得很多年前就有这个问题(不是微软的 uint8_t):) @Pramod:它存在,但你不想使用它。它是 __attribute__((mode(...))) 只有在实现具有支持它们的类型时才在 ISO 中需要它们(我知道这应该是大多数实现)。还有atleast 变体以及用于该大小或更大的类型。

以上是关于GCC 中有固定大小的整数吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用非固定整数(int、long)而不是固定大小的整数(int64_t、int32_t)有啥好处吗?

使用 gmp 固定大小的整数...?

警告:从/到不同大小的整数转换为/从指针转换

使用数字作为大小创建整数的char数组

具有固定子集大小的 Sum-subset

大小应该使用有符号整数还是无符号整数?