在 C 中将空指针转换为函数指针
将 dlsym() 等函数返回的空指针转换为函数指针在 C 中并不简单。默认情况下,C 98/03 中禁止此类直接转换。
限制原因
在 C 98/03 中,void* 指针用于引用对象,不是函数或成员指针。
C 0x 中的条件支持
在 C 0x 中,实现可以选择支持将 void* 转换为函数指针。如果支持,则行为必须符合标准。
与实现相关的解决方法
虽然不允许直接转换,但这些解决方法可以在大多数平台上运行:
<code class="cpp">fptr my_fptr = reinterpret_cast<fptr>(reinterpret_cast<long>(gptr));</code>
<code class="cpp">fptr my_ptr = 0; reinterpret_cast<void*&>(my_ptr) = gptr;</code>
这些变通办法利用了函数指针地址是对象并且可以使用reinterpret_cast 将其转换为 void** 指针的事实。
警告说明
这些变通办法涉及未定义的行为应谨慎使用。
以上是可以将 void 指针转换为 C 中的函数指针吗?的详细内容。更多信息请关注PHP中文网其他相关文章!