为什么在short/int/long中多了一个整数类型?

Why an extra integer type among short/int/long?

直到最近我还认为 'long' 与 'int' 是一回事,因为历史原因和桌面处理器都至少有 32 位(并且只有 "dupe" 有问题因为只在 32 位机器上开发)。

阅读this,我发现,其实C标准定义int类型是至少一个int16,而'long'是应该至少是一个 int32。

事实上在列表中

无论编译器和平台选择何种实现,总是存在非空交集,因此存在重复。

为什么标准委员会在可以像 char/short/int/long(或 int_k、int_2k、int_4k、int_8k)?

是否出于历史原因,例如,gcc x.x 将 int 实现为 32 位,而另一个编译器将其实现为 16 位,还是我遗漏了真正的技术原因?

中心点是 int/unsigned 不仅仅是 char, short,int, long, long long 阶梯的整数大小的又一步。 int 很特别。它是 所有较窄类型提升到的大小,因此通常在给定处理器上工作 "best"。所以 int 应该匹配 shortlong 还是明显地楔入 short/long 之间是高度依赖于平台的。

C 旨在适应 范围的处理器。鉴于 C 已经 40 岁以上,这证明了一个成功的策略。