直到最近,由于历史原因和桌面处理器至少拥有32位(并且只在32位机器上开发时遇到“重复”问题),我一直认为“long”与“int”是相同的。

通过阅读this,我发现实际上C标准将int类型定义为至少int16,而“long”应至少为int32。

事实上,在列表中:

短有符号整数类型。能够至少包含[-32767,+32767]范围

基本有符号整数类型。能够至少包含[-32767,+32767]范围;

长有符号整数类型。能够至少包含[-2147483647,+2147483647]范围

长长有符号整数类型。能够至少包含[-9223372036854775807,+9223372036854775807]范围;

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

为什么标准委员会在 char/short/int/long(或 int_k、int_2k、int_4k、int_8k)这些简单类型之外引入了一种额外的类型?

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