1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

C mehrere Datein includen

  • SBDevil
  • 16. Oktober 2005 um 15:05
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • SBDevil
    Punkte
    15
    Beiträge
    2
    • 16. Oktober 2005 um 15:05
    • #1

    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

  • Paulchen
    Gast
    • 16. Oktober 2005 um 15:34
    • #2

    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.

  • SBDevil
    Punkte
    15
    Beiträge
    2
    • 16. Oktober 2005 um 16:49
    • #3

    Jau danke!
    So klappt es wunderbar :)

  • bnd
    Punkte
    170
    Beiträge
    31
    • 16. Oktober 2005 um 21:24
    • #4

    Du sollst in jeder Header Datei Preprozessor Direktiven analog zu folgendem Beispiel drin haben:

    #ifndef HEADER_H
    #define HEADER_H
    .
    .
    .
    #endif // HEADER_H


    HEADER ist durch den Namen der jeweiligen Datei zu ersetzen.

    András

  • davewood
    Punkte
    3.204
    Beiträge
    536
    • 16. Oktober 2005 um 22:03
    • #5

    das hat naemlich folgenden sinn, wurde eine datei bereits irgendwo schonmal inkludiert, so wird sie nicht nochmal inkludiert.

    david

  • stormcrow
    Punkte
    360
    Beiträge
    72
    • 21. Oktober 2005 um 20:08
    • #6

    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.

  • jeuneS2
    Punkte
    1.227
    Beiträge
    238
    • 21. Oktober 2005 um 21:57
    • #7
    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.

  • bnd
    Punkte
    170
    Beiträge
    31
    • 22. Oktober 2005 um 15:11
    • #8
    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.

    Musst nicht nachdenken, das ist korrekt.

  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum