Hasty Briefsbeta

双语

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的灵活整数不是设计错误;它是实现跨多种机器可移植性的关键特性。