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.


  • Mod

    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 nur fcn* 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.


Anmelden zum Antworten