Frage

ich eine C-Funktion, die einen Funktionszeiger als Argument nimmt, es ist ein destructor, dass ich am Ende meines Programms nennen werde. Hier ist der Prototyp meiner Funktion:

int store_dest(void (*routine)(void *));

Ich mag mit einigen anderen Info dieser Funktionszeiger in eine Struktur speichern. Um eine schöne Struktur zu haben, möchte ich ein typedef auf diese Funktionszeiger haben. Hier ist meine typedef:

typedef void (*my_destructor)(void *);

Und hier ist meine Struktur:

typedef struct my_struct{
  my_destructor dest;
  other_info ...
} my_struct;

Während der Initialisierung Schritt habe ich das „dest“ Feld auf eine Funktion von mir einstellen mag, hier ist der Prototyp dieser Funktion:

void* my_dummy_dest(void* foo);

Das Problem (in der Tat ist es nur eine Warnung, aber ich mag es zu unterdrücken) tritt auf, wenn ich versuche, das „Ziel“ -Feld meine Struktur auf „my_dummy_dest“:

my_struct.dest = &my_dummy_dest;

Ich erhalte eine „Warnung: Zuordnung von inkompatiblen Zeigertyp“

Das gleiche, wenn ich sie nur vergleichen:

if (my_struct.dest == &my_dummy_dest)

Ich erhalte eine „Warnung: Vergleich verschiedener Zeigertypen fehlt eine gegossene“

Aber ich bekomme keine Warnung, wenn ich mit einer anderen Routine des „dest“ Feld gesetzt. Ich habe nicht bekommen, warum ich diese Warnungen haben.

War es hilfreich?

Lösung

Ihre Dummy destructor deklariert eine Lücke Zeiger , keine Leere zurück. Diese Erklärung nicht die typedef für Ihre destructor Funktionszeiger entsprechen.

Andere Tipps

Die typedef sollte sein:

typedef void *(*my_destructor)(void *);

Da my_dummy_test zurück void * statt Leere. Wenn Sie void * zurückkehren wollen, sollte die typedef sein

typedef void* (*my_destructor)(void *);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top