Raf*_*ida 2 c function-pointers compiler-warnings
这实际上是一个非关键问题,但是我在大多数情况下使用函数指针时都会收到此警告,但仍无法自行解决原因.考虑以下原型:
typedef void * Pointer;
void tree_destroyLineage(Tree greatest_parent, void *dataDestructor(Pointer data));
Run Code Online (Sandbox Code Playgroud)
到目前为止,我可以编译我的千行代码并获得零警告.所以我假设我正确地写了声明.但后来我在代码中调用它,将自由作为我的析构函数传递,因为存储在树节点中的数据是简单的结构:
tree_destroyLineage(decision_tree, free);
Run Code Online (Sandbox Code Playgroud)
这让我得到了一个"warning: passing argument 2 of 'tree_destroyLineage' from incompatible pointer type"
信息.我的第一个假设是编译器无法在编译时弄清楚Pointer
并且void *
是相同的事情,所以我尝试用完全相同类型的函数指针创建另一个函数,该函数指针"重新调用"调用free()
并更改函数指针声明接受void *
而不是指针.这两种方法在同一个地方给了我同样的警告.
我做错了什么,如何解决?
Unk*_*own 10
我相信像free这样的函数的正确签名是:
void (*freefunc)(void*)
Run Code Online (Sandbox Code Playgroud)
不
void *dataDestructor(Pointer data)
Run Code Online (Sandbox Code Playgroud)
我不确定你的图书馆,但我的免费没有回报价值(即,它是无效的).它不返回void指针.
如果你想让第二个参数成为一个指向函数的指针,该函数返回void并将void指针作为参数,我相信你想要的是:
void(*fn)(void*)
并不是
void*fn(void*)
这就是你拥有的.