У меня есть функция 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" с помощью другой процедуры. Я не понимаю, почему у меня есть эти предупреждения.