我有一个代码,其中强制转换整数结构指针会在gcc(linux)上发出警告
typedef struct st {
int a;
char *b;
}st;
...
int handle;
int main() {
...
st *sptr = (st*)handle;
...
}
根据C11规范
整数可以转换为任何指针类型。除非事先指明,否则 结果是实现定义的,可能没有正确对齐,可能不指向 引用类型的实体,可能是陷阱表示。
我的问题是 我们可以将一个整数转换为结构指针,或者我们应该寻找其他方法并保持这个作为最后的手段吗?
答案 0 :(得分:1)
有两件事需要考虑:
可能无法表示结果。 int
可能与给定平台的指针类型具有相同的表示形式。这就是为什么uintptr_t
存在这种情况的原因。 uintptr_t handle;
会使您的代码可移植。
整数值必须是可以解释为给定系统的对齐地址的东西。