我看到内核代码中使用了 u8 u16 u32 u64 数据类型。 And I am wondering why is there need to use u8
or u16
or u32
or u64
and not unsigned int
?
原文由 user966588 发布,翻译遵循 CC BY-SA 4.0 许可协议
我看到内核代码中使用了 u8 u16 u32 u64 数据类型。 And I am wondering why is there need to use u8
or u16
or u32
or u64
and not unsigned int
?
原文由 user966588 发布,翻译遵循 CC BY-SA 4.0 许可协议
将我的 10 美分添加到 这个答案 中:
u64
表示“无符号 64 位”值,因此,根据运行/编译代码的架构,必须以不同方式定义它才能真正达到 64 位长。
例如,在 x86 机器上, unsigned long
的长度为 64 位,因此该机器的 u64
可以定义如下:
typedef unsigned long u64;
这同样适用于 u32
。在 x86 机器上, unsigned int
长度为 32 位,因此该机器的 u32
可以定义如下:
typedef unsigned int u32;
您通常会在 --- 文件中找到这些类型的 types.h
typedef
声明,该文件对应于您将源代码编译到的体系结构。
原文由 Alexandre Schmidt 发布,翻译遵循 CC BY-SA 4.0 许可协议
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
2 回答802 阅读✓ 已解决
1 回答3.3k 阅读
通常在靠近硬件工作或试图控制数据结构的大小/格式时,您需要精确控制整数的大小。
至于
u8
vsuint8_t
,这仅仅是因为 Linux 早于<stdint.h>
在 C 中可用,但根据我的经验,这在技术上是 C99 主义,在大多数现代编译器上,即使在它们的 ANSI-C / C89 模式下。