C :указатель на функцию и проблема с typedef
-
23-08-2019 - |
Вопрос
У меня есть функция C, которая принимает указатель на функцию в качестве аргумента, это деструктор, который я вызову в конце моей программы.Вот прототип моей функции :
int store_dest(void (*routine)(void *));
Я хочу сохранить этот указатель на функцию в структуре с некоторой другой информацией.Чтобы иметь красивую структуру, я хочу иметь typedef для указателя на эту функцию.Вот мой typedef :
typedef void (*my_destructor)(void *);
И вот моя структура :
typedef struct my_struct{
my_destructor dest;
other_info ...
} my_struct;
На этапе инициализации я хочу присвоить полю "dest" значение моей функции, вот прототип этой функции :
void* my_dummy_dest(void* foo);
Проблема (на самом деле это просто предупреждение, но я бы хотел его подавить) возникает, когда я пытаюсь установить для поля "dest" моей структуры значение "my_dummy_dest". :
my_struct.dest = &my_dummy_dest;
Я получаю "предупреждение:присвоение из несовместимого типа указателя"
То же самое, когда я просто сравниваю их :
if (my_struct.dest == &my_dummy_dest)
Я получаю "предупреждение:при сравнении различных типов указателей отсутствует приведение"
Но я не получаю никакого предупреждения, когда устанавливаю поле "dest" с помощью другой процедуры.Я не понимаю, почему у меня есть эти предупреждения.
Решение
Объявлен ваш фиктивный деструктор, возвращающий значение void указатель, а не пустота.Это объявление не соответствует typedef для указателя вашей функции деструктора.
Другие советы
Значение typedef должно быть:
typedef void *(*my_destructor)(void *);
Потому что my_dummy_test возвращает void* вместо void.Если вы хотите вернуть void*, значение typedef должно быть
typedef void* (*my_destructor)(void *);