c - GCC 中是否有固定大小的整数?

标签 c gcc portability low-level

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

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

最佳答案

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" .

关于c - GCC 中是否有固定大小的整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/269614/

相关文章:

c++ - `-g -rdynamic` gcc 标志是否显着减慢应用程序执行(增加性能消耗)?

c++ - 为什么 std::bind 在将 icc 14.01 与 gcc 4.8 一起使用时会出错?

c - "volatile"是否能保证多核系统的可移植 C 代码中的任何内容?

shell - 如何在 BSD 查找中使用 xargs?

c - 保存用户 ID 的目的

c - http 服务器响应(套接字)的 header 和内容之间存在差异

c - 在 C 中模拟文件系统

c - Bad EIP 值错误是什么意思?

c++ - “Integer constant is so large that it is unsigned”编译器警告有理

networking - 我可以编写 go 库以供其他语言使用吗?