2010-11-19 7 views
1

Sagen wir, ich eine Header-Datei haben inclusions.h genannt, die alle #include <...> s für mein Projekt hat. inclusions.h enthält eine weitere Headerdatei namens settings.h, in der verschiedene Konstanten geändert werden können.Mutual Einbeziehung von Header-Dateien

Wenn #include <math.h> in inclusions.h, haben settings.h Zugriff auf die Math-Bibliothek? Oder muss ich auch #include <math.h> in settings.h?

+1

Haben Sie es versucht? Was ist passiert? –

+0

Eine kleine Randnotiz, standardmäßig, wenn Sie in C für Microchip-Chips programmieren, tun sie automatisch, was Sie für ihre HardwareProfile.h-Header vorschlagen. Sie laden einen "Standard" -Header, den Sie modifizieren werden, um den für Ihre Einrichtung benötigten Standard zu enthalten. Manchmal werden solche Dinge getan, um "Standards" für eine größere Organisation beizubehalten. AKA, um xyz zu verwenden, schließen Sie diesen spezialisierten Kopf ein, aber wenn Sie xzy tun müssen, schließen Sie diesen ein. Persönlich ... einschließlich aller Header, wo speziell benötigt wird, ist die Art, wie ich es tue. – g19fanatic

Antwort

5

Wenn math.h vor settings.h enthalten ist, settings.h sollte auch Zugang zu der Datei math.h. haben Um aber den Zugriff sicherzustellen (und die Abhängigkeiten anzugeben), sollten Sie die Dateien dort einfügen, wo sie benötigt werden, also auch in math.h.

+0

Ah, das macht Sinn. Ist es nicht schlecht, Bibliotheken mehr als einmal einzubinden? – Maxpm

+1

@ Maxpm nein ist es nicht. –

+1

Nein, es ist definitiv keine schlechte Übung. Im Gegensatz dazu ist die Einbeziehung aller möglichen Header in jeden anderen Header unter Verwendung einer zentralen Header-Datei eine schlechte Übung. Fügen Sie die Header einfach dort ein, wo sie benötigt werden, und nicht mehr, aber bei Bedarf mehrmals. Die Include-Wächter verhindern ohnehin doppelte Deklarationen. – Flinsch

3

Es hängt von der Reihenfolge der Einschlüsse ab. #include ist eine Präprozessordirektive, die einfach durch Textersetzung funktioniert. Also, wenn in inclusions.h Sie haben:

#include <math.h> 
#include <settings.h> 

Einstellungen math "sehen". Wenn Sie haben:

#include <settings.h> 
#include <math.h> 

kann es nicht. Aber: Was würde passieren, wenn Sie settings.h an anderer Stelle verwendet ohne einschließlich math.h vor? Versuchen Sie am Ende, jede Include-Datei unabhängig zu machen.

1

In diesem Fall, wie andere hier schon berichtet haben, abhängig von der Reihenfolge der Aufnahme könnte es zugänglich sein. Dies liegt daran, dass diese Quelldateien Teil einer Übersetzungseinheit sind (Quelle + beinhaltet im Wesentlichen). Wenn also <math.h> vor "settings.h" steht, könnte es durch sie sichtbar sein. Wenn die Einstellungen jedoch Teil einer anderen Übersetzungseinheit wurden oder wenn Sie bestimmte Umlagerungen verschieben, die sich ändern könnten. Um "sicher" zu sein, sollten Sie einfach die Header-Dateien einfügen, die für eine Datei in der Datei erforderlich sind.

Verwandte Themen