typedef und funktion
-
Was ist der Unterschied zwischen
typedef (void) (foo) (void);
und
typedef (void) (*foo) (void);
?
Und wo verwende ich was? Hab in einem Quellcode ziemlich viel vom ersten Typ, komme damit aber nicht ganz klar.
-
Das ist beides kein gültiges C.
Meinst du vielleicht:
typedef void (foo) (void); typedef void (*bar) (void);
?
-
Beides syntaktisch falsch, würd ich sagen. Um das
void
vorne dürfen keine Klammern geschrieben werden. (Die Klammer um foo ist lediglich unnütz.) Machen wir mal so:typedef void fcn(void); typedef void (*fcn_ptr)(void);
fcn ist ein Funktionstyp, fcn_ptr ist ein Funktionszeigertyp. Anwendung:
void myFunction(void) { ... } fcn* fptr1 = myFunction; fcn_ptr fptr2 = myFunction;
Das braucht vielleicht eher eine Erläuterung.
myFunction
steht für die Funktion, zerfällt aber in (fast?) jedem Kontext sofort in einen Zeiger auf die Funktion. Mit Funktionen selbst kann man quasi gar nicht hantieren, immer nur mit Zeigern darauf, deshalb kommt in dem Beispiel auch nurfcn*
vor. Deshalb muss man auch nicht&myFunction
schreiben.
-
Ein Funktionsname zerfällt automatisch in einen Zeiger auf den Funktionstyp, außer als Operand von sizeof und &. Das ist bei Arraynamen übrigens genauso.
Außerhalb des Standards können Compilerbauer hier etwas anbieten.