Как я могу определить тип uintptr
так, чтобы он мог содержать по крайней мере uint32_t
и uintptr_t
, не прибегая к объединению?
Были ли разрешены sizeof()
в препроцессоре,это дало бы то, что я хочу:
#include <inttypes.h>
#if sizeof(uint32_t) > sizeof(uintptr_t) // unlikely, but the standard allows it
typedef uint32_t uintptr;
#else
typedef uintptr_t uintptr;
#endif
Весьма вероятно, что uint32_t
будет меньше, если не равно uintptr_t
, но стандарт не дает никаких гарантий. Тем не менее, такая платформа была бы очень редкой, поэтому сейчас я решил это, просто имея следующее:
static_assert(sizeof(uint32_t) <= sizeof(uintptr_t), "Yikes");
typedef uintptr_t uintptr;