C mehrere Datein includen

  • Guten Tag,
    Ich hab ein Problem und hoffe jemand kann mir dabei helfen.
    Undzwar möchte ich ein Programm schreiben was aus 2 Datein besteht.
    Eine projekt.c für die Implementierungen und eine projekt.h für die structs definitionen. Meine Funktionen aus der projekt.c möchte ich dann natürlich in meiner main.c benutzen.
    Die Dateien schauen wie folgt aus:

    main.c:
    #include "projekt.c"
    #include "projekt.h"
    int main(){
    test z1,z2,z3;
    ... // malloc auf z1 und z2 und sowas
    z3=zadd(z1,z2);
    }


    projekt.c:
    #inlude "projekt.h"
    test zadd(test s1, test s2){
    test s3;
    ... // malloc auf s3 und sowas
    return s3;
    }


    projekt.h:
    typedef struct Test *test;
    struct Test{
    ...
    };

    Ich hab mir gedacht: da ich in der main.c sowohl die structs als auch die Funktionen benutze, muss ich beide Dateien includen.
    Bei der projekt.c benutz ich auch die structs und muss deswegen die projekt.h includen.
    Jetzt sagt mein Compiler aber: redefinition of 'struct Test'

    Wo ist mein Fehler? Darf ich nich 2 mal die projekt.h includen? Oder woran liegt es?

    Falls mir wer helfen kann wär ich echt dankbar :)
    MfG SBDevil

  • ich hab zwar selber (noch) so gut wie keine ahnung von c, aber ich glaub, das sollte so funktionieren:

    main.c:

    C
    /* #include "projekt.c"  (ist überflüssig) */
    #include "projekt.h"
    
    
    int main(){
       test z1,z2,z3;
       ... // malloc auf z1 und z2 und sowas
       z3=zadd(z1,z2);
    }


    projekt.c:

    Code
    #inlude "projekt.h"
    test zadd(test s1, test s2) {
       test s3;
       ... // malloc auf s3 und sowas
       return s3;
    }


    projekt.h:

    Code
    test zadd(test s1, test s2);  /* forward declaration */
    
    
    typedef struct Test {
       ...
    } test;


    die dateien projekt.c und main.c separat kompilieren, und die entstehenden object-files dann verlinken. keine ahnung, welchen compiler du verwendest, mit gcc geht das so:

    Code
    gcc -g -c projekt.c
    gcc -g -c main.c
    gcc -g -o main main.o projekt.o


    das programm kannst dann mit

    Code
    ./main


    ausführen.

  • hmm, also ich kenn file guards eigentlich nur mit

    Code
    #endif // HEADER_H


    am ende. mag grad ned nachdenkn obs bei der einen oder andren variante probleme gebn koennt, sondern wollts nur anmerkn.

    I came here to chew gum and kick ass, and I'm all out of gum...

  • Zitat von stormcrow

    hmm, also ich kenn file guards eigentlich nur mit

    Code
    #endif // HEADER_H


    am ende. mag grad ned nachdenkn obs bei der einen oder andren variante probleme gebn koennt, sondern wollts nur anmerkn.


    Diese Variante ist richtig, erstere ist a) syntaktisch nicht korrekt und b) sinnlos, weil beim nächsten Mal includen der Guard ja wieder nicht definiert ist.

    Why bother spending time reading up on things? Everybody's an authority, in a free land.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!