我已经搜索过但找不到任何结果(我的术语可能已关闭)所以请原谅我,如果之前已经提出过这个问题。
我想知道是否有一种简单的方法可以在没有首先声明函数指针然后为函数指针指定地址的情况下将void*
作为C函数调用。
即。 假设要调用的函数是void(void)
void *ptr; ptr = ; ((void*())ptr)(); /* call ptr as function here */
用上面的代码,我得到错误C2066:在VC2008中强制转换为函数类型是非法的
如果可能,具有返回类型和多个参数的函数的语法有何不同?
你的演员应该是:
((void (*)(void)) ptr)();
通常,通过为函数指针类型创建typedef
可以使这更简单:
typedef void (*func_type)(void); ((func_type) ptr)();
但是,我应该指出,向函数指针或从函数指针投射普通指针(指向对象的指针)在标准C中并不严格合法(尽管它是常见的扩展)。
在转换为函数类型时,我非常困惑。 键入dede函数指针类型更容易,更易读:
void *ptr = ...; typedef void (*void_f)(void); ((void_f)ptr)();
在C ++中: reinterpret_cast< void(*)() > (ptr) ()
使用reinterpret_cast
可以为您节省一组令人困惑的括号,而< >
明确地将类型与调用本身区分开来。
需要了解更多c/c++开发分享将void *作为函数调用而不声明函数指针,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!
以上就是c/c++开发分享将void *作为函数调用而不声明函数指针相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/980200.html