Präprozessor-Anweisung include richtig nutzen
-
Hallo zusammen,
vermutlich ist dieses ein ganz böser Anfängerfehler, aber er lässt mir keine Ruhe.
Und zwar habe ich eine .cpp Datei erstellt und in dieser Datei einige globale Funktionen definiert. Per include musste ich noch eine andere .h Datei einbinden.
Dieses führte dazu, dass ich an anderen Stellen Probleme mit der .h Datei bekommen hab.
Nun habe ich die .cpp Datei einfach in .h umbenannt und bekomme keine Fehler mehr.
Mit der Hilfe von Google kam ich nicht zu einem eindeutigen Ergebnis. Mein Compiler ist der 4.0.1 GCC für MacOs.
Könnt ihr mir sagen, wieso es nun klappt?
Mir wurde beigebracht, dass alle Dateien vor dem Compiler gleich sind und .h/.cpp nur für die bessere menschliche Lesbarkeit da ist.
Viele Grüße
MM
-
MrMilk schrieb:
...
Dieses führte dazu, dass ich an anderen Stellen Probleme mit der .h Datei bekommen hab...ich rate jetzt mal: mehrfacheinbindeprobleme?
abhilfe: includeguards.
mfg zillerthal
-
includeguards
waren dabei (in beiden Fällen)
-
MrMilk schrieb:
[...] böser Anfängerfehler [...] Nun habe ich die .cpp Datei einfach in .h umbenannt und bekomme keine Fehler mehr. [...] Mir wurde beigebracht, dass alle Dateien vor dem Compiler gleich sind und .h/.cpp nur für die bessere menschliche Lesbarkeit da ist.
Ich habe lange nachgedacht, wie man auf so etwas antworten kann. Du gibst überhaupt keine Beispiele (Code, Programm-Struktur auf Dateiebene, Compiler/Linker/IDE). Du sprichst mehrere Punkte an, zu denen man mehrere Stunden etwas erzählen und erklären könnte. Es ist offensichtlich, dass Du mit dem ganzen Prozess, wie man von Quellcode zu einem ausführbaren Programm kommt, nicht vertraut bist. Dies sind aber Grundlagen, die in jedem guten C++ Buch beschrieben stehen -- sicherlich besser beschrieben, als das, was man im Rahmen einer Forum-Antwort bringen kann.
Versuch mal selbst zu recherchieren, welche Schritte durchgeführt werden, um von Quellcode zu einem ausführbaren Programm zu kommen. Hier mal ein paar Stichworte für Deine Recherche: "Getrenntes Übersetzen", "Übersetzungseinheit", "Präprozessor", "Linker".
Gruß,
SP
-
MrMilk schrieb:
Hallo zusammen,
vermutlich ist dieses ein ganz böser Anfängerfehler, aber er lässt mir keine Ruhe.
Und zwar habe ich eine .cpp Datei erstellt und in dieser Datei einige globale Funktionen definiert. Per include musste ich noch eine andere .h Datei einbinden.
Dieses führte dazu, dass ich an anderen Stellen Probleme mit der .h Datei bekommen hab.
Nun habe ich die .cpp Datei einfach in .h umbenannt und bekomme keine Fehler mehr.
Mit der Hilfe von Google kam ich nicht zu einem eindeutigen Ergebnis. Mein Compiler ist der 4.0.1 GCC für MacOs.
Könnt ihr mir sagen, wieso es nun klappt?
Mir wurde beigebracht, dass alle Dateien vor dem Compiler gleich sind und .h/.cpp nur für die bessere menschliche Lesbarkeit da ist.
Viele Grüße
MMBitte Fehlermeldung und Code einfügen..
Aber ich schätze auch du hast Probleme mit dem Includeguard.
Angenommen die Datei heisst Foo.hpp, dann sähe der Includeguard so aus:#ifndef FOO_HPP #define FOO_HPP // Hier den Code hin #endif // FOO_HPPWas macht der Code?
Es wird vom Präprozessor geprüft ob FOO_HPP bereits definiert ist. Wenn nicht, wird es definiert. Das sorgt dafür, dass er den Code nur einmal verwendet.
Natürlich kann man die Guards auch anders nennen aber so wird es weitläufig gemacht.
rya.
-
So, da nun dort schon wieder das Wort Grundlagen steht, muss ich mir nun doch eingestehen, dass mein gefährliches Halbwissen nicht weiter hilft. Im besonderen auch nicht "googeln auf Abruf".
Somit habe ich mich nun entschlossen etwas in meine C++ Ausbildung zu investieren und begrüße die Bücher "Die C++ Programmiersprache" von Bjarne Stroustrup und C++ Primer von Lippman/Lajoie auf meinem Schreibtisch. Dank sei den langen Öffnungszeiten von großen Buchhandlungen (ich möchte ihr keine Schleichwerbung machen
) bis 19 Uhr.Viele Grüße
MM
-
