Hintergrund : Trennen von Deklaration und Implementierung ?



  • Hat es eigentlich noch einen anderen Zweck außer den der Übersichtlichkeit , Deklaration und Implementierung zu trennen ?
    Hat es vieleicht irgendwelche Vorzüge beim Kompilieren ?

    Mfg



  • Ich vermute mal, dass es sich auch auf die Performance beim Compilieren
    auswirkt, da nur der header geparsed werden muss.

    Allerdings viel wichtiger ist sind die Header bei der Entwicklung von Libraries.
    So kannst du Funktionen adressieren ohne deren Quellcode zur Verfügung
    zu haben.



  • Eine vernünftige Trennung in Header- und Implementierungsdateien kann die benötigte Kompilierzeit stark herabsetzen. Dazu gehört der Einsatz von Vorwärtsdeklarationen, die möglichst späte Einbindung anderer Header, und generell möglichst wenig Abhängigkeiten der einzelnen Übersetzungseinheiten.



  • Was genau ist eine Vorwärtsdeklaration ?
    Könntest du dies kurz erklären ?

    Mfg



  • eine forward declaration ist einfach nur die deklaration von einer klasse (einem struct/enum/funktion......), die dem compiler eben diese bekannt macht , ihm aber sagt dass die definition irgendwann zu einem späteren zeitpunkt kommt (wann ist erstmal egal, und selbst wenn sie nie kommt springt dir erst de rlinker an den hals)



  • Jo ok , ich hab mich grade belesen .
    Man nutzt es anscheinend auch bei Klassen die Member Variablen enthalten welche Pointer auf andere Objekte sind . Hier reicht die Deklaration der Klasse da sich die Größe einer Pointer variable konstant verhält .



  • Ich bin kein Compiler-Bauer, aber ich vermute mal Du kannst solche netten Sachen machen:

    #include <object.hpp>
    
    struct A
    {
        object o;
    ;
    

    Für Objekte im lokalen Speicher werden die Objekteinformationen benötigt.
    Ohne Header geht halt nur ein Pointer:

    struct A
    {
        object *o;
    ;
    

    Damit löst sich wahrscheinlich die Frage, warum andere Sprachen, keine lokalen Objekte unterstützen, sondern nur auf dem Freestore mittels new.



  • Bacid90210 schrieb:

    Jo ok , ich hab mich grade belesen .
    Man nutzt es anscheinend auch bei Klassen die Member Variablen enthalten welche Pointer auf andere Objekte sind . Hier reicht die Deklaration der Klasse da sich die Größe einer Pointer variable konstant verhält .

    Man kann es übrigens auch als Pendant zu Funktionsdeklarationen sehen.

    void a();
    
    int main()
    {
        a();
        return 0;
    }
    
    void a()
    {
        // do something
    }
    

    Ist quasi dasselbe, nur dass man natürlich noch das beachten sollte, was Artchi beschrieben hat.



  • Skym0sh0 schrieb:

    eine forward declaration ist einfach nur die deklaration von einer klasse (einem struct/enum/funktion......), ...

    enum geht nach dem aktuell gültigen Standard nicht.


Anmelden zum Antworten