"Dumme Frage": Individuelle "OneFile-MultiHeader"



  • Hallo alle miteinander.
    Also ich denke zwar, das aus rein technischer Sicht grundsätzlich eigentlich nichts dagegen sprechen dürfte, würde mich jedoch deutlich wohler fühlen, wenn diese Vermutung dank euch bestätigt (oder widerlegt) wird .

    Also, so wie ich es bislang verstanden habe, ist es in c++ üblich (konvention), eine cpp + eine Headerdatei.
    Wird mit "ifndef"(...usw...) sauber gearbeitet ist es auch durchaus möglich, mehrere Headerdatein in einer zusammenzufassen.

    Wäre es jedoch auch umgekehrt möglich?

    Also folgendes hypothetisches Szenario:
    In einer cpp-Datei steht der code für Funktion A & B.

    Nehmen wir nun den Fall, ein groses Projekt mit vielen Files.
    In manchen Fieles wird nur Funktion A verwendet.
    In manchen Fieles wird nur Funktion B verwendet.
    Und wieder andere Fieles benötigen alle Funktionen der cpp-Datei.

    Üblicher weise würde man nun einfach bei allen Fiels "#inklude cpp.h" schreiben

    Könnte man jedoch stattdessen auch für die Funktionen A & B jeweils einen eigenen Header schreiben, obwohl beide Funktionen in der selben Datei stehen?
    Anders ausgedrückt darf eine cpp-Datei auch mehr als einen Header haben?

    Und natürlich könnte man jetzt auch die Frage stellen, warum beide Funktionen in der selben Datei stehen "müßen", nur wäre dies dann eine andere Frage, eventuell ein möglicher Lösungsansatz, jedoch keine klare Antwort auf die eigentliche Frage.

    Nachtrag: cpp.h ist natürlich nur ein Platzhalter (die dazugehörige cpp-Datei wäre in dem Fall dann wohl cpp.cpp). Mit Funktion.h und Funktion.cpp wäre es wohl eindeutiger gewesen.



  • Du kannst das so machen.

    @axam sagte in "Dumme Frage": Individuelle "OneFile-MultiHeader":

    Anders ausgedrückt darf eine cpp-Datei auch mehr als einen Header haben?

    Eine cpp-Datei "hat" keinen Header. Die Dateinamen und -pfade sind technisch gesehen völlig unabhängig. Da man aber auch mal etwas finden will, sollte man das technisch mögliche nicht unbedingt voll ausschöpfen.



  • @manni66

    Danke



  • @axam
    So lange du keinen guten Grund hast es anders zu machen, ist es eine gute Idee sich an das gängige Muster "foo.h + foo.cpp" zu halten.

    Was man noch relativ häufig antrifft, speziell bei Libraries, ist das Gegenteil von dem was du beschrieben hast, also eine Header und die Implementierung steht dann in mehreren .c/.cpp Files.

    Mehrere Header für eine .c/.cpp Datei ist dagegen wirklich unüblich. Funktionieren tut es aber genau so problemlos. Und falls du einen guten Grund dafür hast... wieso nicht?



  • @hustbaer sagte in "Dumme Frage": Individuelle "OneFile-MultiHeader":

    Mehrere Header für eine .c/.cpp Datei ist dagegen wirklich unüblich

    Habe ich schon öfter gesehen. Allerdings überlappen die beiden Header, der eine nennt sich dann in der Regel my_cpp_filename_fwd.h und enthält nur Forwärtsdeklarationen, also nur "class A; class B; struct C;", während der andere Header ohne "fwd" dann die volle Deklaration mit Member(-variablen und -funktionen) enthält, also "class A { int var1;... void fun(); }; ...".

    Wenn man von anderer Stelle deine Klasse einbindet, reicht es dann aus, den _fwd-Header im Header zu includen, solange man die Typen nur als Pointer oder Referenz nutzt und auf keine Member zugreift. Vorteil: Compilezeitersparnis.

    Ich weiß aber nicht, ob @axam sowas überhaupt in Betracht gezogen hat.



  • @wob sagte in "Dumme Frage": Individuelle "OneFile-MultiHeader":

    Habe ich schon öfter gesehen. Allerdings überlappen die beiden Header, der eine nennt sich dann in der Regel my_cpp_filename_fwd.h und enthält nur Forwärtsdeklarationen, also nur "class A; class B; struct C;", während der andere Header ohne "fwd" dann die volle Deklaration mit Member(-variablen und -funktionen) enthält, also "class A { int var1;... void fun(); }; ...".

    OK, klar, das kenne ich auch. Daran hatte ich nicht gedacht. Und ich glaube auch fast dass die Frage nicht so gemeint ist 🙂


Log in to reply