2009-12-23 46 views
0

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

的任何建议非常感谢,

回答

3

不带参数蒙上了函数和一个空返回一个int32_t一个函数指针*参数,返回一个长。这可能会起作用,但它比技巧更好(long和int32_t不一定相同)。

如果你不能改变enable_evt_hdlr或evt_hdlr的类型,然后做一个中间功能:

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

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