c - 哪些数值类型可以安全地转换为 intptr_t?
问题描述
uintptr_t
并且intptr_t
数字类型足够大以包含指针,我的问题是它们在向它们投射时如何与其他数字类型相关。具体来说,哪些类型(int
、long
、long long
、short
、char
等size_t
)不能NUM_TYPE
被定义为使得下一个函数不会破坏n
?
intptr_t cast_num(NUM_TYPE n){return (intptr_t) n;}
解决方案
可选类型:
intptr_t
范围至少为[-0x7FFF...0x7FFF]。
uintptr_t
范围为 [0...至少0xFFFF]。
根据需要使用INTPTR_MIN, INTPTR_MAX, UINTPTR_MAX
from<stdint.h>
形成条件代码。
intptr_t cast_long(unsigned long n) {
_Static_assert(UIINTPTR_MAX >= ULONG_MAX, "unsigned long too big"):
return (intptr_t) n;
}
注意:指向/来自的对象指针uintptr_t
应该intptr_t
通过void *
. 函数指针可能太大。
推荐阅读
- arrays - 在excel中创建排除重复项的列表
- python - 如何在 Python 上处理包含 3 字节单词的二进制数据?
- javascript - 获取使用 Dropzone 上传的文件并将其添加到输入字段以在服务器上进行处理
- c# - 数据上下文绑定在主细节场景中丢失
- css - 50% 的边界半径在提交但不是文本输入
- anylogic - 任何逻辑中基于代理大小的服务块
- r - R:如何根据模式从字符串中提取文本片段
- batch-file - For /F 循环如何使用 awk 或 tr 从结果中删除引号
- vb.net - VB.NET 选项卡控件在更改选项卡时暂停绘图
- php - 无法设置 Cookie