typedef mit unverständlichem Beispiel



  • Hallo,
    beschäftige mich gerade mit typdef.

    typedef typdefinition alias;
    Beispiel: typedef int* iPtr;

    Das ist ja noch klar. Wann ich tausche alle int* mit iPtr aus. Alles noch logisch.
    Aber jetzt..

    int* (*bar(void))(int,double);
    typedef iPtr (*iPtr_f_int_double_t)(int,double);
    damit: iPtr_f_int_double_t bar(void);

    Bitte, was, wie, wo?
    Kann das bitte jemand gaaaanz langsam in Idiotendeutsch erklären?


  • Mod

    typedef int* iPtr;
    

    iPtr ist der neue int*.

    int* (*bar(void))(int,double);
    

    Das deklariert eine Funktion, die heißt bar. Die Funktion hat als Parameter void (also Nichts). Diese Funktion gibt einen Zeiger zurück, der von dem folgenden Typ ist: Eine Funktion mit Argumenten int und double, die einen Zeiger zurück gibt, der aus int zeigt.

    Puh! Das wäre ganz schön schwer von Hand zu zerlegen gewesen. Da lobe ich mir doch, dass man mit http://cdecl.ridiculousfish.com/ cheaten kann:
    http://cdecl.ridiculousfish.com/?q=int*+(*bar(void))(int%2Cdouble)%3B+

    Weiter geht's:

    typedef iPtr (*iPtr_f_int_double_t)(int,double);
    

    iPtr_f_int_double_t ist nun ein neuer Name für folgendes Konstrukt:
    Ein Zeiger auf eine Funktion, die (int, double) als Argument hat und einen iPtr (also einen int*) zurück gibt. Wir erkennen, dies ist gerade der Rückgabetyp von der Funktion bar, die oben deklariert wurde.

    Somit:

    iPtr_f_int_double_t bar(void);
    

    Deklariere eine Funktion bar, die void als Argument hat und iPtr_f_int_double_t zurück gibt. Wir erkennen, diese Deklaration ist identisch zu der, die weiter oben gemacht wurde. Aber wesentlich lesbarer. Oben konnte man ja kaum erkennen, was zu den Funktionsparametern gehört und was zum Rückgabetyp.


Anmelden zum Antworten