gpt4 book ai didi

c - 将 plain int 64 位制作成会破坏很多合理的代码吗?

转载 作者:太空狗 更新时间:2023-10-29 16:33:57 24 4
gpt4 key购买 nike

直到最近,我还认为大多数系统实现者/供应商决定在 64 位机器上保持纯 int 32 位是一种权宜之计。对于现代 C99 固定大小类型(int32_tuint32_t 等),需要每个大小为 8、16、32 和 64 的标准整数类型大部分消失了,看起来 int 也可以变成 64 位。

然而,C 中普通 int 大小的最大实际后果来自于 C 本质上没有对小于 int 类型的算术运算。特别是,如果 int 大于 32 位,则 uint32_t 值的任何算术结果都具有 signed int 类型,这是相当令人不安的.

这是将 int 在实际实现中永久固定为 32 位的充分理由吗?我倾向于说是。在我看来,uint32_t 可能有一大类用途,当 int 大于 32 位时就会中断。即使应用一元减号或按位补码运算符也会变得危险,除非您转换回 uint32_t

当然,同样的问题适用于当前实现的 uint16_tuint8_t,但每个人似乎都知道并习惯于将它们视为“小于-int"类型。

最佳答案

如您所说,我认为晋升规则确实是 killer 锏。 uint32_t 然后会提升为 int 并且突然间您将拥有带符号的算术,而几乎每个人都期望无符号。

这将主要隐藏在您仅进行算术运算并分配回 uint32_t 的地方。但在与常量进行比较的地方,它可能是致命的。依赖于这种比较而不进行显式转换的代码是否合理,我不知道。像 (uint32_t)1 这样的转换常量会变得非常乏味。我个人至少总是使用后缀 U 作为我想要无符号的常量,但这已经不像我想要的那样可读了。

另请记住,uint32_t 等不能保证存在。甚至 uint8_t。其实现是 POSIX 的扩展。因此,从这个意义上说,C 作为一种语言远不能实现这一目标。

关于c - 将 plain int 64 位制作成会破坏很多合理的代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4559251/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com