【发布时间】:2021-03-18 18:57:03
【问题描述】:
A 有一个功能:
void somefunc(void func(void *)) { ... }
void foo(int *num) {...}
我试图将 foo 作为参数传递给 somefunc 但收到警告。 这样做的正确方法是什么?
【问题讨论】:
-
你有一些不平衡的括号,这绝对是不正确的。发布minimal reproducible example 和警告。
-
void sumfunc(foo(X)) -
void somefunc(void (*func)(void *)) { ... }?但是void *和int *之间的类型不匹配是个问题。如果你知道它可以在你的机器上工作,你可以强制转换:somefunc((void (*)(void *))foo)但通常它是 UB,因为例如void *和int *可能有不同的调用约定。 AFAIK 唯一可移植的方法是重写foo以期待void *,或者编写一个辅助函数。 -
@NateEldredge 如果
somefunc在使用前将其转换回void (*)(int *)也是安全的。 -
@dxiv,如果
somefunc()在您的控制之下并且倾向于假设参数确实是void (*)(int *),那么最好将其声明为参数类型首先。
标签: c function-pointers