Предупреждение при преобразовании типа между указателем и указателем на функцию

Вы можете проверить библиотеку типа jspell.

6
задан steveha 6 February 2010 в 02:32
поделиться

2 ответа

Стандарт C специально не поддерживает преобразования между указателями на объекты данных и указателями на функции. GCC и Visual Studio поддерживают это как расширение.

Если вы хотите, чтобы ваша функция соответствовала стандарту (но по-прежнему использовала параметр void * ), вы можете вместо этого передать указатель на указатель функции. Это работает, потому что указатели на функции сами по себе являются обычными объектами, поэтому указатель на указатель функции может быть преобразован в void * и обратно:

init_struct(struct my_struct *p, void *pfn)
{
    PFN_FOO *foo = pfn;
    p->pfn = *foo;
}

Затем вызывающий должен создать временный PFN_FOO объект, на который будет передаваться указатель при вызове:

PFN_FOO fp = &somefunc;
/* ... */
init_struct(p, &fp);
12
ответ дан 8 December 2019 в 16:05
поделиться

Разве вы не пишете?

typedef void (*PFN_FOO)(int x, int y);

См. Этот учебник .

3
ответ дан 8 December 2019 в 16:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: