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