extern, include und forward declaration



  • Hallo,
    Da mich diese drei "Befehle" schon seit einiger Zeit beschäftigen, und mir der Umgang damit ab und an Kopfzerbrechen bereitet dachte ich ich frag einfach mal hier nach.
    Nachdem ich mir einiges darüber in meinem Buch, und auch im Web durchgelesen habe, kann ich mir nun in etwa ein Bild des ganzen hin und her machen. Doch sicher bin ich mir nicht und ich weiß nicht ob ich alles richtig aufgefasst habe.
    Mal eine ganz primitive Beschreibung für dummies, so wie ichs aufgefasst habe ;P

    #include:
    Include wird grundsätzlich verwendet um headerfiles einzubinden. Sprich wenn ein Programm aus mehreren Files besteht, muss man dem jeweiligen Programmteil auch die benötigen Programmfiles bekannt machen. Durch #include wird im Prinzip der gesamte Inhalt der includierenden File an der stelle des includes eingefügt.

    forward declaration: class name
    Diese wird meist verwendet wenn man als Beispiel in einer Klasse A einen Zeiger auf eine Klasse B als Parameter oder Rückgabewert verwenden will. Da die Klasse A zur compilezeit die Klasse B nicht kennt, würde er den Typ des Zeigers ebenfalls nicht kennen und eine Fehlermeldung hervorrufen. Class B sagt der Klasse A das es irgendwo eine definition der Klasse B gibt.

    extern
    Denn Sinn von extern habe ich nocht nicht wirklich verstandn. Scheinbar benötigt man dies nur wenn man Variablen oder Funktionen in einer File A benötigt, diese aber in einer File B definiert sind.

    Ist dies soweit korrekt ? Und kann man sagen, dass EIGENTLICH durch include sowohl class als uach extern hinfällig werden? Doch warum gleich eine gesamte file includieren wenn ich lediglich den Typen bekannt machen muss ? Darum gibts diese?

    Danke : )



  • sust schrieb:

    #include:
    Include wird grundsätzlich verwendet um headerfiles einzubinden. Sprich wenn ein Programm aus mehreren Files besteht, muss man dem jeweiligen Programmteil auch die benötigen Programmfiles bekannt machen.

    Ergänzung: Die Schnittstellen der Programmfiles werden durch das Includieren der passenden Header bekanntgemacht. Die Programmfiles selbst sollten sich jedoch nicht gegenseitig includen.

    Durch #include wird im Prinzip der gesamte Inhalt der includierenden File an der stelle des includes eingefügt.

    Nicht nur "im Prinzip". Da Includes vor dem Übersetzen verarbeitet werden, wird tatsächlich der gesamte Inhalt eingefügt, bevor der Compiler das Ergebnis zu Gesicht bekommt.

    extern
    Denn Sinn von extern habe ich nocht nicht wirklich verstandn. Scheinbar benötigt man dies nur wenn man Variablen oder Funktionen in einer File A benötigt, diese aber in einer File B definiert sind.

    Genau, und da Du diese File B nicht direkt in File A includen sollst (siehe oben), erstellst Du eine B.h, die die Variablen und Funktionen der File B deklariert (also mit extern, wobei das bei Funktionen unnötig ist). Diese B.h includest Du in A.



  • Noch kleine Anmerkung.

    #include ist kein Befehl, sondern eine Präprozessoranweisung und extern ist ein Schlüsselwort von C++.



  • mhhh alles kla ty


Anmelden zum Antworten