2009-12-23 3 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(); 
} 

и передать это событие обработчика. Таким образом, стек будет обработан, как и было обещано.

Смежные вопросы