VS2003 Global Header



  • Hallo Leute,

    ich würde gerne eine "Global.h" in mein Projekt einfügen, welche der Compiler schon implizit in jede meiner anderen Header includiert!? Hat das was mit Pre-Compiled-Header zu tun?

    Welche Möglichkeiten habe ich da?



  • @SoIntMan sagte in VS2003 Global Header:

    Hallo Leute,

    ich würde gerne eine "Global.h" in mein Projekt einfügen, welche der Compiler schon implizit in jede meiner anderen Header includiert!? Hat das was mit Pre-Compiled-Header zu tun?

    Nicht direkt.

    Welche Möglichkeiten habe ich da?

    • Es richtig machen und in jedem anderen Header File des Projekts als erste Zeile #include "Global.h" reinschreiben.
    • Faul sein und den "forced include" Switch verwenden.


  • Wenn Du ein VS-2003 Projekt hast, wird das evtl. precompiled Header benutzen.
    Und die benutzen meistens als ersten include stdafx.h

    Also einfach rein in die stdafx.h und das Problem könnte schon gelöst sein.



  • Es sollte halt jedes #include was man in einem Header braucht auch in diesem Header inkludiert werden. stdafx.h wird aber nur in den .cpp Files inkludiert. Von daher gehört ein #include "Global.h" in alle Headers und nicht ins stdafx.h. Zumindest sofern es in den Headers benötigt wird.



  • sorry für das späte Feeback

    ..Danke Leute..

    Dann werde ich die "nicht faule" Lösung verfolgen;)



  • @hustbaer sagte in VS2003 Global Header:

    Es sollte halt jedes #include was man in einem Header braucht auch in diesem Header inkludiert werden. stdafx.h wird aber nur in den .cpp Files inkludiert. Von daher gehört ein #include "Global.h" in alle Headers und nicht ins stdafx.h. Zumindest sofern es in den Headers benötigt wird.

    Das Problem mit solchen globalen Headern ist ja meistens, dass man eben auch automatisch Sachen inkludiert die man in einer spezifischen Header-Datei eben nicht braucht und somit letztlich nur die Compilezeit verlängert.



  • @It0101 ... OK. Und? So lange man sparsam genug damit umgeht finde ich das nicht schlimm. Ich mache in meinen Projekten grundsätzlich ne "Common.h" die von allen anderen Headers als erstes inkludiert wird. Darin definiere ich dann üblicherweise Dinge wie das Assertion-Makro für das Projekt, alle Namespaces und hole Sachen wie <stdint.h> <stddef.h> und evtl. noch <memory> rein.
    Ja, ist (compile-time) Overhead, weil in 2-3 .cpp Files könnte es tatsächlich sein dass ich eine der dort definierten/inkludierten Dinge nicht braucht. Dafür spare ich mir 2-3 include Anweisungen in 100 anderen Files.
    Die 10~100ms pro Projekt die das kostet leiste ich mir.



  • @hustbaer sagte in VS2003 Global Header:

    @It0101 ... OK. Und? So lange man sparsam genug damit umgeht finde ich das nicht schlimm. Ich mache in meinen Projekten grundsätzlich ne "Common.h" die von allen anderen Headers als erstes inkludiert wird. Darin definiere ich dann üblicherweise Dinge wie das Assertion-Makro für das Projekt, alle Namespaces und hole Sachen wie <stdint.h> <stddef.h> und evtl. noch <memory> rein.
    Ja, ist (compile-time) Overhead, weil in 2-3 .cpp Files könnte es tatsächlich sein dass ich eine der dort definierten/inkludierten Dinge nicht braucht. Dafür spare ich mir 2-3 include Anweisungen in 100 anderen Files.
    Die 10~100ms pro Projekt die das kostet leiste ich mir.

    Ja wenn man das im griff hat ist das auch in Ordnung. Aber gerade bei Leuten die noch nicht so lange im C++-Geschäft sind, artet das manchmal in einen allgemeinen "allincludes.h"-Header aus, wo alles drin ist, nur eben ohne precompile 😉

    Deswegen bin ich ein Verfechter davon in Headerfiles nur das zu inkludieren, was dort wirklich gebraucht wird.

    Und gerade wenn man in so einem Header dann noch boost mit drin hat, glaube ich nicht, dass das bei deiner compilezeit einen unterschied von nur 100ms ingesamt macht.



  • Und gerade wenn man in so einem Header dann noch boost mit drin hat, glaube ich nicht, dass das bei deiner compilezeit einen unterschied von nur 100ms ingesamt macht.

    Kommt darauf an um welche Boost Headers es geht und wo man die sonst noch überall braucht. In "meinem" Projekt bei meinem letzten Job hatten wir quasi überall Boost drinnen. Weil C++98 und irgendwoher müssen die shared_ptr und Co ja kommen. Dementsprechend waren boost/shared_ptr.hpp und boost/scoped_ptr.hpp auch mit im Common.h.

    Wenn man natürlich anfängt da boost MPL Sachen mir rein zu nehmen oder Boost.Format, Regex etc. gehört man natürlich gehauen.


Log in to reply