哪些数字类型可以安全地转换为 intptr_t?

Which numerical types can be safely casted to intptr_t?

uintptr_tintptr_t 是大到足以包含指针的数值类型,我的问题是它们在向它们转换时如何与其他数值类型相关。具体哪些类型(intlonglong longshortcharsize_t等)不能NUM_TYPE定义这样下一个函数就不会破坏 n?

的值
intptr_t cast_num(NUM_TYPE n){return (intptr_t) n;}

可选类型:

intptr_t 的范围至少为 [-0x7FFF...0x7FFF]。

uintptr_t 的范围为 [0... 至少 0xFFFF]。


使用<stdint.h>中的INTPTR_MIN, INTPTR_MAX, UINTPTR_MAX根据需要组成条件代码。

intptr_t cast_long(unsigned long n) {
  _Static_assert(UIINTPTR_MAX >= ULONG_MAX, "unsigned long too big"): 
  return (intptr_t) n;
}

注意:对象指针to/fromuintptr_tintptr_t应该通过void *转换。函数指针可能太大了。