int,long之类的到底是几位的,为什么会在”可移植性缺陷”这一章出现?
C 语言对 int, short, long 的具体字节数规定得非常模糊。
| 类型 | 8位机 (如8051) | 16位机 (如 8086) | 32位机 (如 ARM/x86) | 64位机 (如 x64) |
|---|---|---|---|---|
char | 1 字节 | 1 字节 | 1 字节 | 1 字节 |
short | 2 字节 | 2 字节 | 2 字节 | 2 字节 |
int | 2 字节 | 2 字节 | 4 字节 | 4 字节 |
long | 4 字节 | 4 字节 | 4 字节 | 4或8 字节 |
| 指针 | 1~2 字节 | 2 字节 | 4 字节 | 8 字节 |
如果你想写一段在 8 位机和 64 位机上都表现一致的代码,请彻底放弃 int、short、long,改用这些 带有明确位数的类型 :
int8_t/uint8_t:保证是 8 位。int16_t/uint16_t:保证是 16 位。int32_t/uint32_t:保证是 32 位(存 40000 选这个最稳)。int64_t/uint64_t:保证是 64 位。
一句话建议:
如果你在写代码时心里在想“这个数会不会超过 32767”,那么请立刻把类型声明改为 int32_t。这不仅是为了避坑,更是专业程序员的标志。