Linux 海湾合作委员会 4.4.1
我有这个传递第二个参数的函数,该参数将其转换为不同的类型。我只是想知道我是否正确?
在我看来,它正在将函数 evt_hdlr 转换为 void * 类型,转换为长指针类型。
if(enable_evt_hdlr(EV_ANY, (long (*) (void *)) evt_hdlr) == -1)
{
..
}
函数 evt_hdlr 定义如下所示:
static int32_t evt_hdlr(void);
非常感谢您的任何建议,
最佳答案
你转换了一个没有参数的函数,并返回一个 int32_t 到一个带有 void* 参数的函数指针,返回一个 long。这可能会奏效,但运气大于技巧(long 和 int32_t 不一定相同)。
如果您不能更改 enable_evt_hdlr 或 evt_hdlr 的类型,则创建一个中间函数:
static long my_evt_hdlr(void*)
{
return (long) evt_hdlr();
}
并将其传递给事件处理程序。这样堆栈将按 promise 处理。
关于c - 理解传递的这个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1951757/