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

C 可以将空指针转换为函数指针吗?

Mary-Kate Olsen
发布: 2024-11-03 04:42:31
原创
764 人浏览过

Can C   Convert a Void Pointer to a Function Pointer?

将 void 指针转换为函数指针:C 中的条件可能性

问题

通过 dlsym() 获取 void 指针,目标是调用该指针引用的函数。与 C 风格的转换不同,尝试使用 static_cast 或 reinterpret_cast 进行转换已失败。

答案

在 C 98/03 中不允许将 void 指针直接转换为函数指针。然而,C 0x 提供了条件支持,允许实现来决定行为。

未定义的行为方法:

虽然标准未定义,但以下代码可能适用大多数平台:

<code class="cpp">void *gptr = dlsym(some symbol..);
typedef void (*fptr)();
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>
登录后复制

复杂但可移植的方法:

此方法利用了函数指针地址这一事实是一个对象指针:

<code class="cpp">// Get address as object pointer
void (**object_ptr)() = &my_ptr;

// Convert to void** (also an object pointer)
void **ppv = reinterpret_cast<void**>(object_ptr);

// Store address from 'gptr' in memory cell pointed to by 'ppv'
*ppv = gptr;</code>
登录后复制

此方法在标准中仍未定义,但在大多数实现上应该运行得相当好。

以上是C 可以将空指针转换为函数指针吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

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