理解这个参数被传递

时间:2009-12-23 09:53:02

标签: c

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);

非常感谢任何建议,

1 个答案:

答案 0 :(得分:3)

您转换了一个没有参数的函数,并将一个int32_t返回给一个带有void *参数的函数指针,返回一个long。这可能有效,但它比技能更幸运(long和int32_t不一定相同)。

如果你不能改变enable_evt_hdlr或evt_hdlr的类型,那就建立一个中间函数:

static long my_evt_hdlr(void*)
{
  return (long) evt_hdlr();
}

并将其传递给事件处理程序。这样堆栈将按照承诺进行处理。