uint32_t vs int作为日常编程的约定

Guy*_*Guy 16 c int uint32

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

chu*_*ica 20

什么时候应该使用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,1,符号/ mag).今天如此多的编码使用2次幂的2次幂整数,人们可能没有意识到事先存在许多其他的安排.也看到这个答案.

  • afaik,`int`被设计为数据类型,可以由cpu(例如cpu寄存器)最有效地处理.`long`只是更长,而'short`更短(但可以访问例如寄存器的一半(`al`,`x`在x86上)). (3认同)

Nik*_*hil 5

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

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

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

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