Grundsatzfrage: #include macht Datei groß?!
-
Hallo zusammen!
Mir ist gerade folgender Gedanke gekommen: Man "included" ja manche Dinge mehrfach (z.B. stdio) innerhalb eines Programms in verschiedene Dateien. Wenn diese dann jedes mal in die Datei vom Präprozessor reingeschrieben werden, wird dann nicht das Programm bei jedem include deutlich größer (eben um die Größe der includierten Datei)???
Danke & Grüße
Fresh
-
Nein, du inkludierst auch nichts zweimal, weil eine doppelte Definition/Deklaration fatal wäre.
-
Danke! Frage beantwortet.
Grüße
Fresh
-
Das Include findet auf Quellcodeebene statt. Der wird dann natürlich entsprechend größer, zumindest aus Sicht des Compilers, aber das wirkt sich nicht notwendig auf die Größe des fertigen ausführbaren Programmes aus, um die es dir ja zu gehen scheint. Header enthalten in der Regel nur Deklarationen und Makros, also alles Dinge, die im Compilat überhaupt nicht auftauchen.
(Wenn du natürlich einen Header mit massenweise statischen Variablen hast, sieht das anders aus, aber das ist sehr unüblich.)
-
ich glaube ich verwechsel header mit quelltextdateien.
also werden header nun mehrfach inluded oder nicht?
weil in dem beispiel bei wikipedia sieht es ja so aus, als dass das zum fehler führen würde...
-
Der Präprozessor inkludet alle Dateien sooft, sooft du ihm dies per #include sagst.
Ob der mehrfach ingekludete Code dies verträgt (Mehrfachdeklaration, etc...) ist eine andere Frage. Du kannst davon ausgehen, dass die Standard-Headerdateien robust bei Mehrfachincludes sind, deine eigenen musst du schon selbst dagegen schützen, mehrfach ingekludet zu werden.
-
Doppelte Deklerationen werden zumindest in Header Dateien der Standartbibliotheken durch Präprozessordirektiven wie #ifndef vermieden.
Wenn du mal sehen willst, was der Präprozessor macht, geb unter ner beliebigen Unix Shell: gcc -E Datei.c -o Praeprz.c ein
-
Who cares schrieb:
Doppelte Deklerationen werden zumindest in Header Dateien der Standartbibliotheken durch Präprozessordirektiven wie #ifndef vermieden.
NULL war ein Sonderfall, oder?
Ist ja auch in quasi jedem Header deklariert
-
Auch Null darf nur einmal deklariert werden, sonst fliegt dir der Compiler um die Ohren
#ifndef NULL #define NULL 0 #endif