Wohin kommt eine Struktur? In *.h oder in *.c



  • Wohin kommt eine Struktur wie

    struct Test {
        int Zahl
    };
    

    In die h datei oder in die c datei? Ich glaube in die h datei oder?

    Was ist jetzt wenn es in irgendeiner anderen Datei Funktionen gibt, die dieses struct benutzen wollen. Also zum Beispiel in der Datei xyz gibt es eine Funktion func die das struct Test als Parameter anfordert. Dann muss ich doch in der Headerdatei in der die Funktion func deklariert wird die Headerdatei in der das Struct Test deklariert ist einbinden?

    #include "strukt.h" //???
    extern void func(struct Test t);
    

    Muss ich jetzt die datei in der sich das struct Test befindet includieren? Schaut für mich schon komisch aus in eine Headerdatei nochmals eine Headerdatei einzubinden... Oder ist das schon alles richtig so?

    Danke für die Hilfe



  • Kleiner Frager schrieb:

    Wohin kommt eine Struktur wie

    struct Test {
        int Zahl
    };
    

    In die h datei oder in die c datei? Ich glaube in die h datei oder?

    Wenn andere diese Struktur verwenden können sollen, dann in eine Header-Datei.
    Das ist der Normalfall.

    Kleiner Frager schrieb:

    Was ist jetzt wenn es in irgendeiner anderen Datei Funktionen gibt, die dieses struct benutzen wollen. Also zum Beispiel in der Datei xyz gibt es eine Funktion func die das struct Test als Parameter anfordert. Dann muss ich doch in der Headerdatei in der die Funktion func deklariert wird die Headerdatei in der das Struct Test deklariert ist einbinden?

    #include "strukt.h" //???
    extern void func(struct Test t);
    

    In diesem Fall reicht auch eine Deklaration. Das Einbinden der Header-Datei kannst du dir hier sparen. Erst dort wo du auf die Elemente von Test zugreifst, brauchst du die Definition von Test (vereinfacht ausgedrückt).

    struct Test;    // Deklaration von Test
    extern void func(struct Test t);
    
    // funcimpl.c
    #include "strukt.h" 
    extern void func(struct Test t)
    {
         // mach was mit t
    }
    

    Schaut für mich schon komisch aus in eine Headerdatei nochmals eine Headerdatei einzubinden... Oder ist das schon alles richtig so?

    Generell sollte nur dann einen Header in einen anderen inklduieren, wenn dies auch wirklich nötig ist. Dann ist aber natürlich keinesfalls falsch.


Anmelden zum Antworten