Share via


Upozornění kompilátoru (úroveň 4, vypnuto) C4464

relativní cesta k zahrnutí obsahuje ".".

Direktiva #include má cestu, která obsahuje specifikátor nadřazeného adresáře ( .. segment cesty).

Poznámky

V sadě Visual Studio 2015 Update 1 a novějších verzích může kompilátor zjistit a vydat upozornění pro direktivu #include , která obsahuje segment cesty nadřazeného adresáře (..). Kód je někdy napsaný, který používá relativní cesty nadřazeného adresáře k zahrnutí hlaviček z externích knihoven. Pokud jsou tyto cesty hlaviček relativní vzhledem k nadřazeným adresářům zadané ve zdrojových souborech, vytvoří riziko: Program může být zkompilován zahrnutím jiného souboru hlaviček, než program hodlá. Tyto relativní cesty nemusí být přenosné do prostředí sestavení jiných vývojářů.

Místo toho doporučujeme zadat cesty k takovým hlaviím v prostředí sestavení, například v INCLUDE proměnné prostředí prostředí nebo v parametrech pro možnost kompilátoru /I (Další zahrnutí adresářů ). V integrovaném vývojovém prostředí sady Visual Studio můžete nastavit cesty na stránce vlastností>konfigurace C/C++>General projektu ve vlastnosti Další adresáře zahrnutí. I když pro ni není žádné konkrétní upozornění, nedoporučujeme při zadávání adresářových adresářů zahrnout adresáře ani segmenty cesty nadřazeného adresáře.

Upozornění C4464 je v sadě Visual Studio 2015 Update 1 nové a ve výchozím nastavení je vypnuté. Slouží /Wall k povolení všech upozornění, která jsou ve výchozím nastavení vypnutá. Slouží /wN4464 k povolení C4464 jako upozornění na úrovni N (kde N je 1–4). Další informace najdete v tématu Upozornění kompilátoru, která jsou ve výchozím nastavení vypnutá. Informace o tom, jak zakázat upozornění zavedená v konkrétní verzi kompilátoru nebo po této verzi, najdete v tématu Upozornění kompilátoru podle verze kompilátoru.

Příklad

Soubory zdrojového kódu, které používají .. segmenty cesty ve #include direktivách, můžou toto upozornění aktivovat, pokud je povolená C4464 nebo když /Wall je zadána možnost.

V tomto příkladu je zdroj projektu v C:\project\source a soubory hlaviček externí knihovny jsou v 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
// . . .

Pokud chcete tento problém vyřešit, přidejte cestu C:\other_lib\headers k adresářům zahrnutí projektu. Potom změňte zdroj tak, aby zahrnoval soubory hlaviček jako externí hlavičky:

// 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
// . . .