kleine Frage zu include



  • Hallo, ich habe vor kurzem angefangen mit C++ zu programmieren und habe nun eine kleine Frage zu dem Präprozessor-Befehl "include". include macht ja nichts anderes als die gegebene Datei in den Quellcode hineinzukopieren. Dabei ist natürlich daruaf zu achten, dass so ein include nicht zwei mal durchgeführt wird, denn sonst wird ja beispielsweise eine Klasse zwei mal deklariert. So nun zu meiner Frage: wenn ich mittels include ".." doppelt einfüge, dann erhalte ich (wie erwartet) einen Fehler. Verwende ich jedoch jetzt include <..> und füge zwei mal dasselbe direkiv ein, so erhalte ich keinen Fehler. Also z.b.
    ...
    include <iostream>
    include <iostream>
    ...
    Das ist doch eigentlich der gleiche Befehl, bloß dass ich einmal auf mein aktuelles Verzeichnis und beim anderen im Standardpfad nach der Datei schaue. Also müsste doch beim zweiten Fall ebenfalls ein Fehler auftauchen.

    Warum taucht also beim Doppelteinfügen mit <..> kein Fehler auf aber bei ".." schon?

    Vielleicht ist die Frage ein wenig komisch aber es lässt mich einfach gerade nicht los und würde mich sehr interessieren.

    Gruß Jessy und vielen Dank schonmal 🙂



  • Bezüglich des Fehlers sollte das eigentlich keinen Unterschied machen.

    Hast du das versucht?

    #include "iostream"
    #include "iostream"

    Das sollte eigentlich keinen Fehler liefern.

    Kann mir nur vorstellen, dass du selbgeschriebene Headerdateien ohne Include Guards http://de.wikipedia.org/wiki/Include_Guard mit "..." einbindest und so einen Fehler erhältst. Das vergleichst du dann mit dem per <...> eingebunden Header iostream.h der aber Include Guards enthält.



  • Dankeschön für die schnelle Antwort. Von include-Guards habe ich zuvor noch nichts gehört - jetzt aber schon.

    Bye 🙂



  • hmpf schrieb:

    Das vergleichst du dann mit dem per <...> eingebunden Header iostream.h der aber Include Guards enthält.

    Bevor hier irgendjemand drauf reinfällt: Jessy hat in seinem Beispiel ganz richtgi <iostream> eingebunden, nicht <iostream.h>. Ersteres ist ein C++-Standard-Header, letzteres gabs Ende des letzten Jahrtausends mal bei einigen Bilbiotheken, ist aber bestenfalls veraltet, wenn überhaupt noch vorhanden.


Log in to reply