Gibt es einen Unterschied zwischen struct NAME {}; und typedef struct {} NAME?



  • Guten Tag,
    gibt es eigendlich einen Unterschied zwischen

    struct NAME {
        char test;
    }
    

    und

    typedef struct {
        char test;
    } NAME
    

    danke im voraus


  • Administrator

    struct NAME {
        char test;
    }; // <- Semikolon vergessen!
    

    Wenn man sowas in C verwendet, dann muss man die Variablen immer so deklarieren:

    struct NAME var;
    

    Mit diesem Konstrukt:

    typedef struct {
        char test;
    } NAME; // <. Semikolon vergessen!
    

    Kann man in C das auch anders machen:

    NAME var;
    

    Dank dem typedef muss man also nicht mehr immer das struct hinschreiben.

    In C++ gibt es diesen Unterschied nicht und es ist zu empfehlen, das erstere zu nutzen. Also das hier:

    struct NAME {
        char test;
    };
    

    Grüssli



  • theoretisch nicht

    aber typedef struct ist C
    früher musste man folgendes schreiben:

    typedef struct
    {
       int a;
       float b;
    } foo;
    
    int main()
    {
       struct foo test;  //glaube ich
    }
    

    ausserdem kommt Visual C++ nicht ganz mit der alten C möglichkeit klar weil es im klassenfenster einen default namen anzeigt da es den namen nicht kennt

    in c++ ist das mit den structs ja so:

    struct foo
    {
       int a;
    } Var1, Var2;
    
    int main()
    {
        Var1.a = 5;   //erstes foo objekt
        Var2.a = 7;   //zweites foo objekt
        foo test;     //drittes foo objekt
        test.a = 1;
    }
    


  • Skym0sh0 schrieb:

    theoretisch nicht

    aber typedef struct ist C
    früher musste man folgendes schreiben:

    typedef struct
    {
       int a;
       float b;
    } foo;
    
    int main()
    {
       struct foo test;  //glaube ich
    }
    

    Falsch.

    Wenn dann "foo test;", da du die Struktur ja als einen
    Typ definierst.



  • ~feraL schrieb:

    Skym0sh0 schrieb:

    int main()
    {
       struct foo test;  //glaube ich
    }
    

    Falsch.

    Wenn dann "foo test;", da du die Struktur ja als einen
    Typ definierst.

    Interessant, denn ich habe vor Kurzem genau das gelesen. Also daß man das struct bei der Deklaration in C mit angeben muss...



  • XHansWurstX schrieb:

    Interessant, denn ich habe vor Kurzem genau das gelesen. Also daß man das struct bei der Deklaration in C mit angeben muss...

    Dravere hat ja bereits alles beschrieben, wo liegt also das Problem?



  • sorry, habe mich von dem "falsch" verwirren lassen


Log in to reply