要甩锅那得甩给早期计算机的制造公司,尤其是 DEC
UNIX 是在 PDP-7 开发出来的,而 PDP-7 的一个 Word (当时的最小操作单位)是 18 字节:
https://gunkies.org/wiki/PDP-7在 C 语言诞生的那个年代,既有 PDP-11 ( C 语言初版诞生的平台),使用现在大家熟知的 16bit / 32bit / 64bit 操作方式;也有 PDP-12 ,使用的是 12-bit ,以现在的标准来看够奇怪吧。
如果当时直接定死了各个基础类型的宽度,那么想要做源码级移植就麻烦多了。
就像如此简单的代码:
int number = 12;
printf("Number: %d\n", number);
int 是 18-bit 还是 12-bit ,又或者是 16-bit ,都由目标机器的编译器自己决定,在当时来看显然是很省事的。
发明人哪能预料到后来会统一为 8 / 16 /32 / 64 bit 标准呢
---------------
当然啦,ANSI / ISO 也有部份责任,第一个 ANSI C 标准制定的年代,已经是 8 / 16 /32 / 64 bit 标准的时期了,完全可以区分得更清晰一些,比如这样:
int 必须比 short 宽,long 必须比 int 宽
可惜标准只规定了最低限度,搞得后来不同系统的 int 和 long 都一塌糊涂。到了 C99 就只能用 macro 打补丁。