Linux gcc 4.4.1
我有这个函数传递第二个参数,将其转换为另一个类型。我只是想知道我是否正确?
在我看来,它将函数evt_hdlr转换为void *类型为long指针类型。
if(enable_evt_hdlr(EV_ANY, (long (*) (void *)) evt_hdlr) == -1)
{
..
}
函数evt_hdlr定义如下所示:
static int32_t evt_hdlr(void);
非常感谢任何建议,
答案 0 :(得分:3)
您转换了一个没有参数的函数,并将一个int32_t返回给一个带有void *参数的函数指针,返回一个long。这可能有效,但它比技能更幸运(long和int32_t不一定相同)。
如果你不能改变enable_evt_hdlr或evt_hdlr的类型,那就建立一个中间函数:
static long my_evt_hdlr(void*)
{
return (long) evt_hdlr();
}
并将其传递给事件处理程序。这样堆栈将按照承诺进行处理。