Call a void* as a function without declaring a function pointer

旧时模样 提交于 2019-12-03 02:37:07

Your cast should be:

((void (*)(void)) ptr)();

In general, this can be made simpler by creating a typedef for the function pointer type:

typedef void (*func_type)(void);
((func_type) ptr)();

I should, however, point out that casting an ordinary pointer (pointer to object) to or from a function pointer is not strictly legal in standard C (although it is a common extension).

I get awfully confused when casting to function types. It's easier and more readable to typedef the function pointer type:

void *ptr = ...;
typedef void (*void_f)(void);
((void_f)ptr)();

In C++: reinterpret_cast< void(*)() > (ptr) ()

The use of reinterpret_cast saves you a set of confusing parentheses, and the < > clearly sets the type apart from the call itself.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!