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