Compilerwarnung (Ebene 4, deaktiviert) C4464
Relativer Includepfad enthält '.'.
Eine #include
Direktive weist einen Pfad auf, der einen übergeordneten Verzeichnisbezeichner (ein ..
Pfadsegment) enthält.
Hinweise
Wenn diese Option aktiviert ist, kann der Compiler in Visual Studio 2015 Update 1 und höher eine Warnung für eine #include
Direktive erkennen und ausgeben, die ein übergeordnetes Verzeichnispfadsegment (..
) enthält. Code wird manchmal geschrieben, der relative Pfade des übergeordneten Verzeichnisses verwendet, um Kopfzeilen aus externen Bibliotheken einzuschließen. Wenn diese übergeordneten verzeichnisrelativen Headerpfade in Quelldateien angegeben werden, wird ein Risiko erzeugt: Das Programm könnte kompiliert werden, indem eine andere Headerdatei eingeschlossen wird, als der Programmierer beabsichtigt. Diese relativen Pfade sind möglicherweise nicht portierbar für die Buildumgebungen anderer Entwickler.
Stattdessen wird empfohlen, die Pfade zu solchen Headern in der Buildumgebung anzugeben, z. B. in der INCLUDE
Umgebungsvariable oder in Parametern für die /I
Compileroption (Zusätzliche Includeverzeichnisse). In der Visual Studio-IDE können Sie die Pfade auf der Eigenschaftenseite "Konfigurationseigenschaften>C/C++>" Des Projekts in der Eigenschaft "Zusätzliche Includeverzeichnisse" festlegen. Obwohl es keine spezifische Warnung dafür gibt, empfehlen wir auch die Verwendung übergeordneter Verzeichnispfadsegmente nicht, wenn Sie die Includeverzeichnisse Ihres Projekts angeben.
Warnung C4464 ist neu in Visual Studio 2015 Update 1 und ist standardmäßig deaktiviert. Wird verwendet /Wall
, um alle Warnungen zu aktivieren, die standardmäßig deaktiviert sind. Wird verwendet /wN4464
, um C4464 als Warnungsstufe N
zu aktivieren (dabei N
ist 1-4). Weitere Informationen finden Sie unter Compilerwarnungen, die standardmäßig deaktiviert sind. Informationen zum Deaktivieren von Warnungen, die in oder nach einer bestimmten Compilerversion eingeführt wurden, finden Sie unter Compilerwarnungen nach Compilerversion.
Beispiel
Quellcodedateien, die Pfadsegmente in #include
Direktiven verwenden..
, können diese Warnung auslösen, wenn C4464 aktiviert ist oder wenn die /Wall
Option angegeben wird.
In diesem Beispiel befindet sich die Projektquelle in C:\project\source
und die Headerdateien einer externen Bibliothek befinden sich in C:\other_lib\headers
:
// C:\project\source\C4464.cpp
// Compile by using: cl /w14464 C4464.cpp
#include "..\..\other_lib\headers\other.h" // C4464
#include "..\..\other_lib\headers\extras\nested.h" // C4464
// . . .
Um dieses Problem zu beheben, fügen Sie den Pfad C:\other_lib\headers
zu den Includeverzeichnissen Ihres Projekts hinzu. Ändern Sie dann die Quelle, um die Headerdateien als externe Header einzuschließen:
// C:\project\source\C4464b.cpp
// Compile by using: cl /w14464 /I"C:\other_lib\headers" C4464b.cpp
#include <other.h> // OK
#include <extras\nested.h> // OK
// . . .