C's Flexible Integer Sizes Were Not a Design Mistake
21 hours ago
- C初学者常常认为整数有固定大小,但原生C类型(int、short、long)的大小取决于平台。
- 在1970年代,C是为各种不同硬件设计的,这些硬件的字长(12–64位)、字节大小(6–9位)和数字表示(二进制补码、反码、符号数值)各不相同。
- 在很多架构上,固定大小的整数效率低下或不切实际;灵活的大小使得可移植性成为可能。
- C标准保证最小范围(例如,int至少16位,long至少32位),而不是精确大小。
- <stdint.h>(C99)提供了精确宽度的类型,如int32_t,但它们是可选的;其理念强调最小范围。
- Lua源代码展示了可移植的C技术,例如使用LUAI_IS32INT来检查int是否至少有32位。
- 现代语言如Java、C#、Rust、Go和Swift常常固定整数大小,因为硬件已经趋同,但仍然包含平台相关的类型(例如isize)。
- C的灵活整数不是设计错误;它是实现跨多种机器可移植性的关键特性。