C 理解正在传递的此参数

C 理解正在传递的此参数,c,C,Linux gcc 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到

Linux gcc 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();
}

并将其传递给事件处理程序。通过这种方式,堆栈将按照承诺进行处理。

您强制转换了一个没有参数的函数,并向一个带有void*参数的函数指针返回一个int32\t,返回一个long。这可能有用,但运气比技能更重要(long和int32_t不一定相同)

如果无法更改enable_evt_hdlr或evt_hdlr的类型,请执行中间功能:

static long my_evt_hdlr(void*)
{
  return (long) evt_hdlr();
}
并将其传递给事件处理程序。这样,堆栈将按照承诺进行处理