使用size_t uint32 uint64等的动机

时间:2011-08-26 00:46:23

标签: c

当我读取一些代码时,对于整数,它们使用一堆不同的类型,例如size_t, uint32, uint64等。 这样做的动机或目的是什么? 为什么不使用int? 与平台交叉相关?或低级相关。

有时,代码对我有意义,因为他们只需要32位int或其他东西。 但是,size_t是什么? 请帮我说清楚。

5 个答案:

答案 0 :(得分:15)

这些是为了平台独立性。

根据定义,

size_tsizeof返回的类型。它足以表示目标系统上的最大对象。

不是很多年前,32位对于任何平台来说已经足够了。今天64位就足够了。但谁知道从现在开始5年,10年或50年需要多少比特?

通过编写代码而不关心 - 即,当你的意思是“对象的大小”时,总是使用size_t - 你可以编写实际编译并运行5年,10年或50年的代码现在。或者至少有一个战斗机会。

使用类型来表达你的意思。如果由于某种原因需要特定数量的位(可能仅在处理外部定义的格式时),请使用特定于大小的类型。如果你想要的东西是“机器的自然字大小” - 即快速 - 使用int

如果您正在处理类似sizeofstrlen的程序,请使用适合该界面的数据类型,例如size_t

并且永远不要尝试将一种类型分配给另一种类型,除非它足够大以按照定义保存该值。

答案 1 :(得分:3)

使用它们的动机是因为你不能依靠intshortlong来获得任何特定的大小 - 这是一个错误太多程序员过去太多次了。如果你看起来不是历史悠久,那么从16位处理器转换到32位处理器,这会破坏大量代码,因为人们错误地依赖int为16位。此后,当人们依赖int为32位时仍然犯了同样的错误,直到今天仍然如此。

更不用说术语intshortlong已经被语言设计师真正认可,他们都决定让它们意味着不同的东西。读取某些C的Java程序员会天真地期望long表示64位。这些术语真的毫无意义 - 它们没有指定关于类型的任何内容,每当我看到一个仍然使用这些术语的新语言时,我都会面对。

标准的int类型是必需的,因此您可以使用您想要使用的类型。他们应该在几十年前推荐intshortlong

答案 2 :(得分:2)

有关size_t的信息,请参阅Stack Overflow问题:What is size_t in C?

uint32和uint64对于他们想要的位数是特定的,并且编译器应该将它们解释为无符号。

答案 3 :(得分:1)

为整数值选择基础类型有很多可能的原因。最明显的一个是你可以存储的最大可能值的大小 - uint32将能够存储两倍于int32的数字,这可能是可取的。 int64将能够存储一个比int32大得多的数字 - 最多2 ^ 63 - 1而不是2 ^ 31 - 1.

还有其他可能的原因。如果您直接从某些源(文件,套接字等)读取二进制数据,则必须确保正确解释它。如果有人写了uint32并将其解释为int32,则可能会将非常大的正数解释为负数(溢出)。

size_t只是unsigned int的typedef,我相信通常是32位。

答案 4 :(得分:1)

对于大多数日常编程,整数的大小并不重要。但有时候具体是好的。这在低级或嵌入式编程中特别有用。另一个有用的地方是科学或计算密集型任务,使用大于必要的int可能会浪费。

size_t的优点是它是无符号的。一方面,使用size_t很好,因为它增加了关于参数应该是什么的更多信息(即不是negitave)。另一方面,它与unsigned int相比不那么紧张。