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
C mehrere Datein includen
-
-
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:
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:
das programm kannst dann mit
ausführen. -
Jau danke!
So klappt es wunderbar -
Du sollst in jeder Header Datei Preprozessor Direktiven analog zu folgendem Beispiel drin haben:
#ifndef HEADER_H
#define HEADER_H
.
.
.
#endif // HEADER_HHEADER ist durch den Namen der jeweiligen Datei zu ersetzen.
András
-
das hat naemlich folgenden sinn, wurde eine datei bereits irgendwo schonmal inkludiert, so wird sie nicht nochmal inkludiert.
david
-
-
Zitat von stormcrow
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. -
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!