为什么 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_t
、int16_t
等...,它们是可选的,并且在标准中是有动机的。
但是对于 uintptr_t
和 intptr_t
类型,它们也是可选的,但我看不出它们是可选的而不是必需的。
在某些平台上,指针类型的大小比任何整型都大得多。我相信此类平台的一个例子是 IBM AS/400,其虚拟指令集将所有指针定义为 128 位。此类平台的最新示例是 Elbrus。它使用 128 位指针,这些指针是硬件描述符而不是普通地址。
C99(及更高版本的标准)标准要求某些类型在 header <stdint.h>
中可用。对于 exact-width,例如 int8_t
、int16_t
等...,它们是可选的,并且在标准中是有动机的。
但是对于 uintptr_t
和 intptr_t
类型,它们也是可选的,但我看不出它们是可选的而不是必需的。
在某些平台上,指针类型的大小比任何整型都大得多。我相信此类平台的一个例子是 IBM AS/400,其虚拟指令集将所有指针定义为 128 位。此类平台的最新示例是 Elbrus。它使用 128 位指针,这些指针是硬件描述符而不是普通地址。