Structs in mehreren Dateien/Modulen verwenden



  • Servus,

    ich habe das folgende Problem:

    ich möchte einen (global) selbst erstellten (typedef) Struct in anderen C (Source) Dateien im selben Programm benutzten. der Compiler erklärt mir aber, das er den Typ trotz "extern" in der anderen Datei nicht kennt.

    Gibt es eine Möglichkeit, den Struct in allen Modulen eines Programms bekannt zu machen?

    Falls es jemand weiß. wäre ich für eine Antwort sehr dankbar!



  • etwa so:

    // global.h
    
    typedef struct blah
    {
       int irgendwas;
       ...
    } blah_t;
    
    extern blah_t global_blah;  // globales objekt für alle bekannt machen, die dieses file includieren
    
    // file1.c
    
    #include "global.h"
    ...
    blah_t global_blah = {123,...,...};  // objekt in dieser datei anlegen
    
    // other_file.c
    #include "global.h"
    ...
    global_blah.irgendwas = 456;   // aus anderer datei darauf zugreifen
    

    🙂



  • Bekanntmachen durch extern Deklaration eines definierten Typen, oder per #include Anweisung.



  • /* mystruct.h */
    
    typedef {int a, float b} mystruct;
    
    /* main.c */
    #include "mystruct.h"
    
    mystruct var;
    
    int main()
    ...
    
    /* otherdat.c */
    #include "mystruct.h"
    
    extern mystruct var;
    
    void somefunction()
    {
       ...
    


  • Hey, danke, das ist schon eine Hilfe!

    Allerdings bleibt leider das große Problem, dass der Typ in anderen Header-Dateien, die diesen Typ in ihren Funktionsdeklarationen benutzen, diesen immer noch nicht kennen.

    Der wird vom Compiler dann als unbekannt beschrieben.
    kann ich auch irgendwie verstehen.
    man kann schließlich nicht header in andere header includieren.
    Gibt es trotzdem eine Lösung für dieses Problem?

    Ich will einfach nur, dass ich einen Typedef Struct xxxxx in jeder .h und .c so gegeben hinnehmen kann wie int oder char.

    das muss doch irgendwie möglich sein oder?

    Nochmals vielen dank für die bisherige hilfe!!!



  • Annonym schrieb:

    Ich will einfach nur, dass ich einen Typedef Struct xxxxx in jeder .h und .c so gegeben hinnehmen kann wie int oder char.
    das muss doch irgendwie möglich sein oder?

    ^^naja, du musst die .h, die die definition enthält, vorher #includen. hier sind ja schon zwei beispiele.
    🙂



  • Annonym schrieb:

    man kann schließlich nicht header in andere header includieren.

    Natürlich kann man das!
    Man sollte nur Mehrfachdefinitionen vermeiden:

    /* mystruct.h */
    #ifndef MYSTRUCTH__
    ##define MYSTRUCTH__
    
    typedef mystruct { 
    ... 
    bla bla
    weitere Deklarationen
    
    #endif
    


  • ... vor dem define darf natürlich auch nur ein # stehen ...



  • DANKE!!!!!!!!!!!!!!!!!!!!!!

    Der letzte Tipp (Schreibt man das inzwischen mit einem oder mit zwei "p"? 🙂 ) war der entscheidene!!!!!!!!!!

    Vielen Dank an alle!!!!!!


Anmelden zum Antworten