在 C 中将空指针转换为函数指针
将 dlsym() 等函数返回的空指针转换为函数指针在 C 中并不简单。默认情况下,C 98/03 中禁止此类直接转换。
限制原因
在 C 98/03 中,void* 指针用于引用对象,不是函数或成员指针。
C 中的有条件支持0x
在 C 0x 中,实现可以选择支持将 void* 转换为函数指针。如果支持,则行为必须符合标准。
依赖于实现的解决方法
虽然不允许直接转换,但这些解决方法可能在大多数平台上起作用:
fptr my_fptr = reinterpret_cast(reinterpret_cast(gptr));
fptr my_ptr = 0;
reinterpret_cast(my_ptr) = gptr;
这些解决方法利用了函数指针地址是对象并且可以使用reinterpret_cast.
转换为void**指针的事实注意事项
这些解决方法涉及未定义的行为,应谨慎使用。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3