Вопрос

У меня есть функция 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 *);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top