首页 > 后端开发 > C++ > 正文

可以将 void 指针转换为 C 中的函数指针吗?

Barbara Streisand
发布: 2024-11-02 21:20:30
原创
450 人浏览过

Can You Cast void Pointers to Function Pointers in C  ?

在 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板