Allgem. Frage zu extern / include / Modul-Hierarchie
-
Hallo liebes Forum,
Folgendes Problem:
- Definiert sind zwei Headerdateien "A.h" und "B.h" (ich beschraenke mich einfach mal auf simple Namen sowie auf Headerdateien, in denen include-Direktiven stehen).
- Ferner existiert eine Datei "mytypes.h" mit Typdefinitionen (z.B. typedef struct ... usw.), die mittels #include sowohl in "A.h" als auch in "B.h" eingebunden wird.
Nun werden im Hauptprogramm die Dateien "A.h" und "B.h" mittels #include eingebunden - und peng, schon knallt es. Denn der Compiler zeigt natuerlich "multiple declarations" der Typdefinitionen aus "mytypes.h" an, da diese sowohl in "A.h" als auch in "B.h" zu finden sind. Laesst man die include-Anweisung in einer dieser Dateien weg, laesst sich die entsprechende Datei (also "A.h" bzw. "B.h") nicht kompilieren, da die Typdefinitionen aus "mytypes.h" nicht bekannt sind.
Frage: Wie loest man sowas in C am elegantesten?
Gibt es nur die Loesung, die Hierarchie der Headerdateien entsprechend aufzubauen, oder gibt es auch die Moeglichkeit, Typdefinitionen (also nicht nur Variablen) mit dem Schluesselwort "extern" zu versehen?
Falls letzteres gilt: Welches ist i.a. die "schoenere" Variante (sofern sich das allgemein sagen laesst): Hierarchie oder "extern"?
Im Voraus bereits vielen lieben Dank fuer einen hilfreichen Tipp!
Viele Gruesse,
Flachkoepper
-
entweder mytypes.h immer in den jeweiligen sources vor a.h bzw b.h inluden oder du macht dir ein 'monsterinclude.h', dass alle .h's in der richtigen reihenfolge includiert und includest dieses in all deinen sources.
-
Das sollte sich doch eigentlich mit include guards vermeiden lassen...
-
Wie Tim schon schrieb, mach es doch so:
In mytypes.h
#ifndef MYTYPES_H #define MYTYPES_H /* hier kommt alles andere von mytypes.h */ ... /* und ganz am Ende dann: */ #endif /* MYTYPES_H */
Fertig ist die Laube. Mache ich bei allen Header Dateien so.