Unterschied zwischen struct und typedef struct?



  • Ich hab jetzt des öftern die folgende Methode gesehen um Strukturen zu erstellen:

    typedef struct tagSECTOR
    {
        int numtriangles;
        TRIANGLE* triangle;
    } SECTOR;
    

    gibt es bei dieser Methode einen Unterschied zu der mir bekannten Methode mit?

    struct SECTOR
    {
        int numtriangles;
        TRIANGLE* triangle;
    };
    


  • ja, die Benennung der deklarierten Typen.

    Variante 1 deklariert folgende Typen

    struct tagSECTOR
    SECTOR
    

    Variante 2 nur den Typ

    struct SECTOR
    

    Übrigens ist es nicht notwendig, das struct-Tag anders zu nennen als einen Typen. Die beiden Namen befinden sich in unterschiedlichen Namensräumen und können nicht kollidieren. Das wär also legal:

    typedef struct Sector { blah; } Sector;
    


  • und wo liegt hier der unterschied:

    typedef struct SECTOR
    
    struct SECTOR
    

    😕

    [ Dieser Beitrag wurde am 06.06.2003 um 15:14 Uhr von THE_FreaK editiert. ]



  • ohne typedef u must vor variablien dekla....rung struct setzen



  • frueher war struct kein "echter" datentyp, also hat man sowas geschrieben

    typedef struct {
    int test;
    } mein_datentyp;

    sprich "definiere struktur als datentyp mein_datentyp".

    in neuerem c/c++ definiert struct wie auch z.b. union einen datentyp, ohne dass man da noch typedefs fuer braeuchte:

    struct mein_datentyp {
    int test;
    };



  • Original erstellt von <cy>:
    **in neuerem c/c++ definiert struct wie auch z.b. union einen datentyp, ohne dass man da noch typedefs fuer braeuchte:

    struct mein_datentyp {
    int test;
    };**

    Wenn Du damit meinst, dass man die Struktur jetzt mit mein_datentyp ansprechen kann, ist dies, zumindest für C, schlichtweg falsch:

    **Thus, there are separate name spaces for various categories of identifiers, as follows:

    [...]

    the tags of structures, unions, and enumerations (disambiguated by following any of the keywords struct, union, or enum);**

    (C99, 6.2.3)

    [ Dieser Beitrag wurde am 06.06.2003 um 18:21 Uhr von SG1 editiert. ]



  • ich hab mal gehört:
    also das typedef wird benutzt, wenn man
    verschiedene compiler benutzt um einfach
    der struktur einen namen zu geben
    bzw als variable zu deklarieren...



  • Original erstellt von bravo:
    ich hab mal gehört:
    also das typedef wird benutzt, wenn man
    verschiedene compiler benutzt um einfach
    der struktur einen namen zu geben
    bzw als variable zu deklarieren...

    ???

    struct foo {};
    ich habe einen Typen deklariert: struct foo

    struct foo {} var;
    ich habe zusaetzlich zu dem Typen struct foo noch eine variable vom Typ struct foo definiert: var

    typedef struct foo {} footype;
    ich habe zusaetzlich zu dem Typen struct foo noch ein typedef footype auf struct foo 'gelegt'.



  • Aha, also ist das

    typedef struct{} SECTOR
    struct SECTOR{}
    

    quasi das selbe, nur das erste is die alte variante.
    gut zu wissen, thx! 🙂



  • Original erstellt von THE_FreaK:
    **Aha, also ist das

    typedef struct{} SECTOR
    struct SECTOR{}
    

    quasi das selbe, nur das erste is die alte variante.
    gut zu wissen, thx! :)**

    nix alt und neu

    beides ist legaler C code nur bei 1) wird der typ SECTOR definiert und bei 2) der Typ struct SECTOR



  • ich glaube, nicht böse gemeint, du solltest dich erst einmal mit dem thema structs befassen. hast du dies getan wirst du sofort den sinn und zweck bzw. die vorteile ( oder auch nachteile ? 🙂 ) bemerken.

    schön tag noch, murdi.

    ps.: der beitrag ist keineswegs böse gemeint, ich glaube aber, dass der fragestellter noch nicht das handling mit structs verstanden hat.



  • Also am Verstandenhaben der Strukturen sollte es nicht liegen. Wie schon gesagt war mir nur die Variante mit dem Typedef einfach neu. Ansonsten danke für die Antworten


Anmelden zum Antworten