在 C99 和 C11(至少是它们的最终草案)中,我们发现需要存在uint_least8_t
, uint_least16_t
, uint_least32_t
, uint_least64_t
in<stdint.h>
以及它们的签名变体。
我认为要求1 到 64 之间uint_least{N}_t
的所有N的可用性是合理的。有充分的理由说明情况并非如此吗?如果实现必须提供 8、16、32 和 64,那么对于所有较小的N值的实现肯定应该是可行的(例如typedef uint_least16_t uint_least15_t;
,对于 x86,等是显而易见的)。
我之所以问,是因为我发现自己想要一种uint_least21_t
类型来存储单个 Unicode 代码点,它可以具有介于两者之间的任何值U+0000
(U+10FFFF
Unicode 4.0 中引入的约束)。我认为这将是一个更准确的选择,以防某些目标架构恰好具有(例如)快速 24 位整数。现在,我遇到了一个很大的预处理器部分,我正在测试21 到 32 之间defined(UINT_LEAST{N}_MAX)
的N以选择正确的类型。