Includes und der VC++ Compiler



  • Ich habe in einem DLL-Projekt einen Ordner "include", in dem ein paar (öffentliche) Header liegen, die sich aber auch teils selbst inkludieren. In den Projekteinstellungen fügte ich dieses Verzeichnis zum Include-Path hinzu. Jetzt wundere ich mich aber gerade, warum mir die IDE die Include-Zeilen

    $PROJECT\include\surfrecon\surfrecon.h:

    #include "sr_libfuncmacro.h"
    #include "sr_errors.h"
    #include "sr_imgbuf.h"
    #include "sr_result.h"
    

    hier unterkringelt, obwohl diese Dateien in demselben Verzeichnis liegen. Bin ich da jetzt vom GCC verwöhnt, dass er damit kein Problem hat, obwohl es nicht Standard-konform ist, oder ist das irgendwie ein Bug bei der VC++ IDE (Visual C++ 2010 Express)?



  • Wenn man im Standard nachschaut, wie so ein #include genau gehandhabt wird, dann findet man das Wort "implementation-defined". Gucke ich online bei Microsoft nach, wird genau beschrieben, welche Verzeichnisse in welcher Reihenfolge durchsucht werden. Bei der Syntax mit Anführungszeichen wird als erstes das Verzeichnis durchsucht, welches die Datei mit der #include-Direktive enthält. Das hatte ich auch so erwartet.

    Es scheint so, als wären die rot unterkringelten Linien hier bei der IDE (2010 Express) ein Bug; denn kompilieren lässt sich das Projekt.



  • Werden sie nur "unterkringelt", oder bekommst du beim Kompilieren auch wirklich Fehler?
    Ich kenne das von Visual-Studio, dass der Intellisense manchmal meint ein #include hätte einen ungültigen Pfad, obwohl es in Wirklichkeit kein Problem gibt (und auch alles fehlerfrei kompiliert).

    Ansonsten, falls du nicht "in diesem Verzeichnis" meinst, sondern "such's bitte im Include-Pfad", dann verwende #include <name.h> statt #include "name.h" .
    Bzw. es geht auch #include "../name.h" , wenn die inkludierte Datei im Parent-Verzeichnis der inkludierenden Datei liegt.



  • hustbaer schrieb:

    Werden sie nur "unterkringelt", oder bekommst du beim Kompilieren auch wirklich Fehler?

    Nur rot unterkringelt. Sagte ich aber auch, dass sich das Projekt ohne Probleme kompilieren lässt.



  • Ja, hatte ich übersehen 🙂


Anmelden zum Antworten