我们都知道,在 C99 中定义的精确宽度整数类型定义stdint.h
是可选的,仅当架构具有这些宽度、符号等的原始类型时才定义。
但是,我刚刚意识到这不是[u]int_(fast|least)N_t
可选的,而是必需的。参见 ISO/IEC 9899:9999,第 7.18.1 节:
[7.18.1.2] 3需要以下类型:
int_least8_t int_least16_t int_least32_t int_least64_t uint_least8_t uint_least16_t uint_least32_t uint_least64_t
[7.18.1.3] 3需要以下类型:
int_fast8_t int_fast16_t int_fast32_t int_fast64_t uint_fast8_t uint_fast16_t uint_fast32_t uint_fast64_t
因此,如前所述,所有能够提供符合标准的 C 或 C++ 编译器的架构——包括独立的编译器,stdint.h
都必须能够提供至少 64 位的原始类型!
鉴于标准在许多其他实现细节上的余地,这对我来说似乎很奇怪。这尤其是因为显然我们自 1999 年以来一直在执行它,在 64 位计算甚至在桌面上成为主流之前几年。更不用说在许多情况下仍然是当前的嵌入式架构之间的滞后。
要求所有实现都具有至少 64 位的原始类型的基本原理是什么?而且,由于这肯定会对实践中的实施者产生严重影响,他们对此有何反应/处理?
(......或者我在阅读中错过了什么,也总是一个答案)