Hallo, wie kann ich einen Funktionspointer in einer Struktur vereinbaren? Wenn ich folgendes vereinbare typedef struct { uint16_t period; uint8_t offset; void *function(void); } OS_TASKS; bekomme ich folgende Fehlermeldung: ../os.h:37: error: field `function' declared as a function Das ganze soll auf einem ATMEGA48 laufen. Sorry für den kurzen Sourcecode im Text.
Das ist kein Funktionspointer was du da hast. typedef struct { uint16_t period; uint8_t offset; void (*function)(void); } OS_TASKS; Jetzt ist es einer.
Hallo Karl Heinz, danke für den Tipp! Ist das GCC-spezifisch? Bei anderen Compilern konnte ich bis jetzt die Klammern weglassen. Außerhalb der Strukturdefinition hat der Compiler nicht gemeckert. Danke nochmals!
Nö, 'void *' ist kein Funktionszeiger, sondern ein nicht näher spezifizierter Zeiger. <type> (*<func>)(<param>) dagegen ein Funktionszeiger.
> Nö, 'void *' ist kein Funktionszeiger, sondern ein nicht > näher spezifizierter Zeiger. Das stimmt zwar, aber in der struct von Mattias ist eine Funktion ohne Parameter, die void* zurückgibt, deklariert.
> Das stimmt zwar, aber in der struct von Mattias ist eine Funktion > ohne Parameter, die void* zurückgibt, deklariert. In einem C++-Kontext wäre das eine gültige Deklaration (damit wird dann eine Methode zu dieser Klasse deklariert). Damit ist es zwar syntaktisch richtig, aber semantisch natürlich etwas völlig anderes. In einem C-Kontext ist es selbst syntaktisch falsch.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.