20

什么时候应该使用 stdint.h 中的数据类型?总是将它们用作约定是否正确?非特定尺寸类型(如 int 和 short)的设计目的是什么?

4

4 回答 4

25

什么时候应该使用 stdint.h 中的数据类型?

  1. 当编程任务指定整数宽度时,特别是为了适应某些文件或通信协议格式。
  2. 当需要平台之间的高度可移植性而不是性能时。

总是将它们用作约定是否正确(那么)?

事情正朝着这个方向发展。固定宽度类型是最近添加到 C 中的。原始 C 具有char, short, int, long并且在尝试是渐进的,但没有具体,以适应各种处理器和环境中可用的各种整数大小。由于 C 已经 40 岁左右,它说明了该策略的成功。已经编写了许多 C 代码并成功地处理了软整数规范大小。随着对一致性的需求不断增加,char, short, int, long and long long, 是不够的(或者至少不是那么容易)等等int8_t, int16_t, int32_t, int64_t出生。新语言往往需要非常具体的固定整数大小类型和 2 的补码。正如他们成功的那样,达尔文式的压力将推动 C。我的水晶球说,我们将看到 C 中越来越多地使用固定宽度类型的缓慢迁移。

非特定尺寸类型(如 int 和 short)的设计目的是什么?

这是适应各种整数宽度(8、9、12、18、36 等)和编码(2's​​、1's、符号/mag)的良好第一步。今天很多编码都使用 2 的补码大小的 2 次方整数,以至于人们可能没有意识到事先存在许多其他安排。另请参阅此答案

于 2013-11-19T18:07:00.500 回答
4

我的工作要求我使用它们,我真的很喜欢使用它们。

当我必须实现一个协议并在一个结构中使用它们时,我发现它很有用,该结构可以是需要发送的消息或某些信息的持有者。

如果我必须使用需要递增的序列号,我不会使用 int 因为序列号不应该是负数。我改用 uint32_t 。因此,我将知道序列号空间并可以相应地计划/编码。

我们编写的代码将在 32 位和 64 位机器上运行,因此在不同的位机器上使用“int”会导致难以识别的细微错误。使用 unint16_t 将在 32 或 64 位架构上分配 16 位。

于 2013-11-19T17:05:17.687 回答
3

不,我会说将它们用于通用编程绝不是一个好主意。

如果您真的关心位数,请继续使用它们,但对于大多数一般用途您并不关心,因此请使用一般类型。通用类型可能更快,而且它们当然更容易读写。

于 2013-11-19T16:53:08.233 回答
2

只有在真正需要时才应该使用固定宽度数据类型(例如,当实现传输协议或访问硬件或需要一定范围的值时(您应该在..._least_...那里使用变体))。您的程序不会适应变化的环境(例如uint32_t,在 10 年前使用文件大小可能还可以,但off_t会适应最近的需求)。正如其他人指出的那样,可能会intuint32_t16 位平台更快地影响性能。

int由于它的签名,它本身就很成问题;最好使用例如size_t,当变量保存strlen()or的结果时sizeof()

于 2013-11-19T17:01:30.667 回答