C语言 哪些数值类型可以安全地转换为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;
}

注意:与uintptr_tintptr_t之间的对象指针应通过void *进行转换。 函数指针可能太大。

相关内容

  • 没有找到相关文章

最新更新