为什么short/int/long中有一个额外的整数类型?

Reg*_*lez 6 c standards integer

直到最近,我认为'long'与'int'是一回事,因为历史原因和台式机处理器都至少有32位(并且只有那种"欺骗"才有麻烦,因为它只在32位机器上开发).

读到这个,我发现,实际上,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 xx将int实现为32位而另一个编译器将其实现为16,或者是否存在我缺少的真正技术原因?

chu*_*ica 6

中心点int/unsigned不仅仅是char, short,int, long, long long梯形的整数大小的另一步. int很特别.它是所有较窄类型提升大小,因此通常在给定处理器上"最佳"工作.所以应该int匹配short,long或者明显地楔入short/long高度平台依赖.

C被设计成容纳一个范围的处理器.鉴于C已有40多年的历史,这是成功战略的证明.