int,long之类的到底是几位的,为什么会在”可移植性缺陷”这一章出现?

← 返回 MOC | ← 主页


C 语言对 int, short, long 的具体字节数规定得非常模糊。

类型8位机 (如8051)16位机 (如 8086)32位机 (如 ARM/x86)64位机 (如 x64)
char1 字节1 字节1 字节1 字节
short2 字节2 字节2 字节2 字节
int2 字节2 字节4 字节4 字节
long4 字节4 字节4 字节4或8 字节
指针1~2 字节2 字节4 字节8 字节

如果你想写一段在 8 位机和 64 位机上都表现一致的代码,请彻底放弃 intshortlong,改用这些 带有明确位数的类型

  • int8_t / uint8_t :保证是 8 位。
  • int16_t / uint16_t :保证是 16 位。
  • int32_t / uint32_t :保证是 32 位(存 40000 选这个最稳)。
  • int64_t / uint64_t :保证是 64 位。

一句话建议: 如果你在写代码时心里在想“这个数会不会超过 32767”,那么请立刻把类型声明改为 int32_t。这不仅是为了避坑,更是专业程序员的标志。