смысл этого параметра передается - PullRequest
0 голосов
/ 23 декабря 2009

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

Большое спасибо за любые предложения,

1 Ответ

3 голосов
/ 23 декабря 2009

Вы приводите функцию без параметров и возвращаете int32_t в указатель на функцию с параметром void *, возвращая long. Это может сработать, но это скорее удача, чем умение (long и int32_t не обязательно совпадают).

Если вы не можете изменить тип enable_evt_hdlr или evt_hdlr, создайте промежуточную функцию:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...