LINUX.ORG.RU

приведение типа функции


0

0

Есть указатель
int (*hrbt_cmp)(void *l, void *r);
Есть функция
int ip_cmp(t_ip_entry *l, t_ip_entry *r);

Когда я делаю
hrbt_cmp = ip_cmp
Естественно получаю варнинг о несоответствии типов,
как мне сделать приведение типа указателя
чтобы этого варнинга небыло ?

Предлагать отключать варнинг не вариант.

anonymous

Ответ на: комментарий от Slavaz

Помогло :)

Премного благодарен.

anonymous
()
Ответ на: комментарий от Slavaz

Редкий случай, когда typedef просто необходим.

anonymous
()

Если это C++, то пользоваться 'hrbt_cmp' после такого приведения нельзя. Если есть указатель на функцию типа T1, то можно привести его к указателю на функцию типа T2 и потом обратно в T1, но при этом кроме обратного приведения с представлением T2 в общем случае больше ничего нельзя делать (unspecified behavior).

erDiZz
()
Ответ на: комментарий от erDiZz

Я правильно понимаю, что это справедливо только для архитектур, где размеры указателей для разных типов могут отличаться?

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

В стандарте ссылок на особенности архитектуры нет. Unspecified сразу для всех.
И потом, это требование не особо ограничивает. Можно делать так, например:

struct MyData
{
};

void callback (void *_data)
{
    MyData * const &data = static_cast <MyData*> (_data);

    /* ... */
}

erDiZz
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.