The C Standard defines intptr_t and uintptr_t in <stdint.h> this way:
7.20.1.4 Integer types capable of holding object pointers
The following type designates a signed integer type with the property that any valid pointer to
voidcan be converted to this type, then converted back to pointer tovoid, and the result will compare equal to the original pointer:intptr_tThe following type designates an unsigned integer type with the property that any valid pointer to
voidcan be converted to this type, then converted back to pointer tovoid, and the result will compare equal to the original pointer:uintptr_tThese types are optional.
Why are these types optional?
Are there any examples of architectures where these types cannot be defined?