typedef-Frage



  • typedef char string[20];
    
    inline void formatstring(char *d, const char *fmt, va_list v) { ... }
    

    Was macht das denn für einen Sinn? Zunächst einmal wird ein string[20] hier als alias für einen char benutzt, sofern ich mich nicht irre.
    Dann steht da also

    inline void formatstring(string[20] *d, ...)

    Aber string[20] *d ergibt doch keinen Sinn, wenn dann müsste das doch string[20] d heißen oder wird das typedef irgendwie wieder aufgehoben?



  • Zunächst mal wird hier string als Alias für char[20] angelegt. In der folgenden Zeile wird string garnicht benutzt, hat also auch keine Auswirkung auf deren Bedeutung. Meintest Du etwas anderes?



  • banshee schrieb:

    typedef char string[20];
    
    inline void formatstring(char *d, const char *fmt, va_list v) { ... }
    

    Hier hat das typedef garnichts mit der Funktion formatstring zu tun. Nicht char wird ersetzt sondern der Ausdruck string (durch char[20]). Und string sehe ich hier garnicht (zumal ich dieses Typedef unter C++ als sehr problematisch ansehe... Ich sag nur std::string).

    cu André



  • Schau mal hier nach.

    Ansonsten richte dich hiernach:
    typedef Datentyp Synonym;

    Was auf der Seite nicht erwähnt wird, dass du typedefs auch im Zusammenhang
    mit struct nutzen kannst (struct = Datentyp)

    Beispiel Listenknoten (einfach verketteter Listen):

    typedef struct knotenstruktur
    {
        int Daten;
        knotenstruktur *Nachfolger;
    }Knoten;
    


  • typedef char string[20];
    

    nun hast du ein neuer typ "string" welcher ein charfeld mit 20 zeichen repräsentiert.

    string a;
    string b;
    

    a und b sind jetzt jeweils char[20] felder...



  • Dieser typedef zeigt mal wieder die Sinnhaftigkeit von Namespaces auf. 🙂



  • okay vielen Dank soweit 🙂

    Ich hab mich da etwas verwirren lassen, normalerweise weiß ich, wie ein typedef funktioniert, aber so eins ist mir noch nie untergekommen. Hat das denn einen tieferen Sinn, dass man einen string als char[20] auf diese Weise belegt? Ich fände typedef char[20] string viel logischer.

    Und nochmal was anderes: Es gibt ja im Internet Massen an schlechtem Code. Gibts da irgendwie Lesematerial, wie man so schlechten Code in guten, effizienten übersetzt, bzw. was guter Code überhaupt ist? 😉



  • banshee schrieb:

    Ich hab mich da etwas verwirren lassen, normalerweise weiß ich, wie ein typedef funktioniert, aber so eins ist mir noch nie untergekommen. Hat das denn einen tieferen Sinn, dass man einen string als char[20] auf diese Weise belegt? Ich fände typedef char[20] string viel logischer.

    Wie deklarierst du Variablen?

    char text[20];
    // Nun schau auf die Syntax von typedef:
    typedef char string[20];
    

    Fällt dir was auf? Die typedef-Syntax ist identisch mit der Variablendeklaration. Ja, man kann darüber stolpern, wenn man dies aber einmal verstanden hat ist es sogar konsistenter und leichter als 2 verschiedene Fälle in C++ einzubauen.



  • Naja,

    ich könnte auch verstehen, wenn man

    char[20] text;
    

    für sprechender hielte.

    Gruß,

    Simon2.



  • asc schrieb:

    Fällt dir was auf? Die typedef-Syntax ist identisch mit der Variablendeklaration. Ja, man kann darüber stolpern, wenn man dies aber einmal verstanden hat ist es sogar konsistenter und leichter als 2 verschiedene Fälle in C++ einzubauen.

    Ja das stimmt auch wieder. Witzigerweise machen wir gerade Java an der UNI, was mich jetzt nur noch mehr verwirrt.

    Ist schon doof, wenn man in eclipse C/C++ syntax schreibt und in Visual Studio Java Code und sich wundert, wenn nix funktioniert -.-


Anmelden zum Antworten