为什么 uintptr_t 和 intptr_t 是 C(和 C++)标准中的可选类型?

Why are uintptr_t and intptr_t optional types in the C (and C++) standard?

C99(及更高版本的标准)标准要求某些类型在 header <stdint.h> 中可用。对于 exact-width,例如 int8_tint16_t 等...,它们是可选的,并且在标准中是有动机的。

但是对于 uintptr_tintptr_t 类型,它们也是可选的,但我看不出它们是可选的而不是必需的。

在某些平台上,指针类型的大小比任何整型都大得多。我相信此类平台的一个例子是 IBM AS/400,其虚拟指令集将所有指针定义为 128 位。此类平台的最新示例是 Elbrus。它使用 128 位指针,这些指针是硬件描述符而不是普通地址。