Unterschiede mit typedef



  • Hallo liebe C++-Freunde

    ich bin heute im Zuge eines Projekts auf folgenden Codeschnipsel gestoßen:

    typedef struct
    {
    double x, y, z, l, m, n, opd, intensity;
    double Exr, Exi, Eyr, Eyi, Ezr, Ezi;
    int wave, error, vigcode, want_opd;
    }DDERAYDATA;

    DDERAYDATA MyData[101];

    das hat bei mir die (relativ simple) Frage aufgeworfen, wofür in diesem Fall typedef verwendet wird, bzw. ob es dabei irgendeinen Unterschied zu folgendem gibt:

    struct DDERAYDATA
    {
    double x, y, z, l, m, n, opd, intensity;
    double Exr, Exi, Eyr, Eyi, Ezr, Ezi;
    int wave, error, vigcode, want_opd;
    };

    DDERAYDATA MyData[101];

    Wird das vielleicht auf andere Weise gespeichert? Oder gibt es da eine allgemeine Absprache bezüglich "schöner Programmieren" die ich nicht kenne?
    Mag vielleicht trivial sein, aber mich hat das schon ein wenig verwirrt.

    Vielen Dank fürs Lesen schonmal und viele Grüße,

    Nekk



  • Hier wird deine Frage ziemlich genau beantwortet.



  • Schreibst du:

    typedef struct
    {
        double x, y, z, l, m, n, opd, intensity;
        double Exr, Exi, Eyr, Eyi, Ezr, Ezi;
        int wave, error, vigcode, want_opd;
    }DDERAYDATA;
    

    dann erzeugst du ein Objekt so:

    DDERAYDATA MyData[101];
    

    Schreibst du:

    struct DDERAYDATA
    {
        double x, y, z, l, m, n, opd, intensity;
        double Exr, Exi, Eyr, Eyi, Ezr, Ezi;
        int wave, error, vigcode, want_opd;
    };
    

    dann musst du ein Objekt so erzeugen:

    struct DDERAYDATA MyData[101];
    

    Damit sparst du dir also, immer das struct vor den Datentypen schreiben zu müssen. Das bezieht sich jetzt auf C. Was dir das in C*+ bringt, eine gute Frage. Da sehe ich keinen Vorteil, obwohl ich das glaube schon öfters in der Standardbib. von MSVS gesehen habe.



  • Wenn ich das also richtig verstehe ist das noch ein Überbleibsel aus C und macht in C++ nur unter ganz speziellen Umständen einen Unterschied, der mich betreffen könnte. Wenn ich das richtig überblicke, sind die Umstände bei mir ziemlich sicher nicht gegeben.
    Ich werde es aber wohl trotzdem bei typedef struct belassen, einfach damit der Code dann im Bedarfsfall leichter in C umgeschrieben werden kann.

    @out: mir scheint, du hast beim letzten Code etwas vergessen, da hast du nämlich genau das gleiche geschrieben wie vorher 🙂 aber ich schätze mal, du meinst genau das, was im Link von [Rewind] beschrieben wurde.

    Vielen Dank euch beiden jedenfalls, das hat mir auf jeden Fall Klarheit verschafft 🙂

    Viele Grüße,
    Nekk



  • Nekk schrieb:

    @out: mir scheint, du hast beim letzten Code etwas vergessen, da hast du nämlich genau das gleiche geschrieben wie vorher 🙂 aber ich schätze mal, du meinst genau das, was im Link von [Rewind] beschrieben wurde.

    Huch ja:

    out schrieb:

    Schreibst du:
    [...] dann musst du ein Objekt so erzeugen:

    [s]DDERAYDATA MyData[101][/s];
    
    struct DDERAYDATA MyData[101];
    


  • Habs dir mal reineditiert 😉



  • Wenn du C++ schreibst, dann kannst du's auch gleich ohne typedef machen. Ich glaube kaum, dass du jemals deinen gesamten Code in C uebersetzen wuerdest.


Log in to reply