在GCC中是否存在固定大小的整数?

14
在GCC编译器上,可以使用__int8__int16__int32等类型来表示具有特定大小的整数。这对于需要处理低级数据结构(如自定义文件格式、硬件控制数据结构等)的应用程序非常有用。
1个回答

33

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的“q8”


3
stdint.h 也是 C99 的一部分,因此它不再仅限于 posix。 - puetzk
我明白了。我模糊地记得看到一个编译器属性,它做了类似的事情.... - Pramod
我记得很多年前我遇到过相反的问题(不是在Microsoft上使用uint8_t) :) - Robert Gould
@Pramod:它确实存在,但你不想使用它。它是__attribute__((mode(...)))。 - CesarB
1
只有当实现具备支持它们的类型时,它们才需要在 ISO 中。大多数实现应该都具备这种支持(我知道)。对于那些大小至少为指定值的类型,还有“atleast”变体可用。 - paxdiablo
@paxdiablo:非常好的观点,但坦白说,如果您正在为不支持上述宽度的有符号和无符号变体的架构编译,则最肯定不会问这个问题 ;) - Jason Coco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接