为什么需要将typedef转换为函数,同时将void*转换为函数指针?

yog*_*ngh 1 c++ casting function-pointers

我正在使用dlsym()来加载函数符号

void (*func)(int);
func = (func*)dlsym(phandle, "function");
Run Code Online (Sandbox Code Playgroud)

这导致编译错误.但是,当我使用typedef来运行时

 typedef void (*func)(int);
 func function = null;
 function = (func*)dlsym(phandle, "function");
Run Code Online (Sandbox Code Playgroud)

这编译好了,但我不明白,为什么它在第一种情况下失败了?谁能告诉原因?我读过C++标准不允许从void*直接转换为函数指针?为什么这个以及typedef是如何解决这个问题的呢?

hmj*_*mjd 5

它在第一种情况下失败,因为它func是一个变量,而不是一个类型,并且不能在强制转换中使用.

注意*错位:

typedef void (*func)(int);
           /* ^ must be here. */
Run Code Online (Sandbox Code Playgroud)