精确宽度整数的实用可移植性
Practical portability of exact-width integers
7.20.1.1p3 提到精确宽度整数 ({u,}int{8,16,32,64}_t
) 是可选的。
如果我使用它们,它实际上会如何限制我的软件的可移植性?
(我对支持机器特别感兴趣 运行 Linux、Windows 或 Mac OS。)
作为一个非常好的经验法则,任何具有 CPU 使用 2 的补码 signed
类型的机器都完全支持精确宽度整数。
你最好找到一个例外。一些大型机和收银机可能使用 1 的补码和更罕见的带符号幅度方案。您可能会发现很难在这样的机器上获取您的代码 运行,但是您想要它吗?
所以我发现了什么:
- POSIX requires {u,}int{8,16,32}_t
- C>=C99 需要 {u,}_{least,fast}{8,16,32,64}(但不是精确宽度 2 的补码类型)
并且从 https://en.wikipedia.org/wiki/Word_(computer_architecture) 看来,人们几乎可以指望硬件支持 8 位、16 位和 32 位整数(但不一定是 64 位整数)大约是从大约1978.
7.20.1.1p3 提到精确宽度整数 ({u,}int{8,16,32,64}_t
) 是可选的。
如果我使用它们,它实际上会如何限制我的软件的可移植性?
(我对支持机器特别感兴趣 运行 Linux、Windows 或 Mac OS。)
作为一个非常好的经验法则,任何具有 CPU 使用 2 的补码 signed
类型的机器都完全支持精确宽度整数。
你最好找到一个例外。一些大型机和收银机可能使用 1 的补码和更罕见的带符号幅度方案。您可能会发现很难在这样的机器上获取您的代码 运行,但是您想要它吗?
所以我发现了什么:
- POSIX requires {u,}int{8,16,32}_t
- C>=C99 需要 {u,}_{least,fast}{8,16,32,64}(但不是精确宽度 2 的补码类型)
并且从 https://en.wikipedia.org/wiki/Word_(computer_architecture) 看来,人们几乎可以指望硬件支持 8 位、16 位和 32 位整数(但不一定是 64 位整数)大约是从大约1978.