【发布时间】:2010-09-21 03:23:59
【问题描述】:
在 MSVC++ 编译器上,可以使用 __int8、__int16、__int32 和类似类型来处理具有特定大小的整数。这对于需要使用自定义文件格式、硬件控制数据结构等低级数据结构的应用程序非常有用。
我可以在 GCC 编译器上使用类似的等效项吗?
【问题讨论】:
标签: c gcc portability low-level
在 MSVC++ 编译器上,可以使用 __int8、__int16、__int32 和类似类型来处理具有特定大小的整数。这对于需要使用自定义文件格式、硬件控制数据结构等低级数据结构的应用程序非常有用。
我可以在 GCC 编译器上使用类似的等效项吗?
【问题讨论】:
标签: c gcc portability low-level
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"。
【讨论】:
atleast 变体以及用于该大小或更大的类型。