Ich habe an mehreren Stellen gelesen, dass eine C-Struktur sicher mehrere Male definiert werden kann, und dennoch bekomme ich einen "redefinition of struct" -Fehler von gcc für die mehrfache Definition einer Struktur (durch mehrere Includes). Ein sehr vereinfachtes Beispiel sieht so aus:
foo.c:
%Vor%a.h:
%Vor%b.h:
%Vor% Wenn ich gcc foo.c
starte, bekomme ich:
Ich weiß, dass ich keine Wächter eingeschlossen habe, und diese werden den Kompilierfehler beheben, aber mein Verständnis war, dass dies trotzdem funktionieren sollte. Ich probierte auch zwei struct bar
Definitionen in foo.c und ich bekomme die gleiche Fehlermeldung? Kann man also Strukturen mehrfach in C definieren oder nicht?
Die Struktur kann nur einmal für jede kompilierte Datei definiert werden. Hier geben Sie zweimal a.h an. (Einmal direkt und einmal über b.h.)
Sie müssen Ihren Code ändern, damit das Symbol nur einmal für eine bestimmte Quelldatei definiert wird.
Nein, sie können nicht mehrfach definiert werden und deshalb haben Sie #ifndef Wächter und sollten sie benutzen.
Haben
%Vor%in der b.h-Header-Datei bedeutet, dass Sie die Leiste neu definieren. Wenn du #ifndef Wachen eingeschlossen hättest, würde das nicht passieren.
Sie haben keine #ifdef-Makros in Ihrer Header-Datei. Wenn Sie Ihre Kopfzeilen in mehrere Quelldateien einschließen, wird dieser Fehler auftreten.
Das gleiche Symbol im selben Bereich kann nicht zweimal definiert werden. Was Sie wahrscheinlich darauf beziehen, ist, dass es sicher ist, die Struktur aus zwei verschiedenen C-Dateien einzuschließen, was im Wesentlichen bedeutet, dass sie doppelt definiert sind (da kein Export existiert) und die Freigabe dieser Strukturen kein Problem ist, da sie kompiliert werden zum selben Speicherlayout