Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
relativ inkluderingssökväg innehåller '..'
Anmärkningar
Ett #include direktiv har en sökväg som innehåller en överordnad katalogspecificerare (ett .. sökvägssegment).
I Visual Studio 2015 Update 1 och senare versioner kan kompilatorn identifiera och utfärda en varning för ett #include-direktiv som innehåller ett överordnat katalogsökvägssegment (..). Kod skrivs ibland som använder relativa sökvägar för överordnad katalog för att inkludera rubriker från externa bibliotek. När dessa överordnade katalogrelativa rubriksökvägar anges i källfiler skapar det en risk: Programmet kan kompileras genom att inkludera en annan rubrikfil än vad programmeraren avser. De här relativa sökvägarna kanske inte är portabla för andra utvecklares byggmiljöer.
I stället rekommenderar vi att du anger sökvägarna till sådana rubriker i byggmiljön, till exempel i INCLUDE miljövariabeln eller i parametrar till kompilatoralternativet /I (Ytterligare inkluderingskataloger). I Visual Studio IDE kan du ange sökvägarna på projektets egenskapssida För konfigurationsegenskaper>C/C++>Allmänt i egenskapen Ytterligare inkludera kataloger . Även om det inte finns någon specifik varning för det rekommenderar vi inte heller användning av överordnade katalogsökvägssegment när du anger projektets inkluderingskataloger.
Varning C4464 är ny i Visual Studio 2015 Uppdatering 1 och är inaktiverad som standard. Använd /Wall för att aktivera alla varningar som är inaktiverade som standard. Använd /wN4464 för att aktivera C4464 som en nivåvarning N (där N är 1–4). Mer information finns i Kompilatorvarningar som är inaktiverade som standard. Information om hur du inaktiverar varningar som introduceras i eller efter en specifik kompilatorversion finns i Kompilatorvarningar efter kompilatorversion.
Example
Källkodsfiler som använder .. sökvägssegment i #include direktiv kan utlösa den här varningen när C4464 är aktiverat eller när /Wall alternativet har angetts.
I det här exemplet finns projektkällan i C:\project\source och ett externt biblioteks huvudfiler finns i 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
// . . .
Åtgärda problemet genom att lägga till sökvägen C:\other_lib\headers till projektets inkluderingskataloger. Ändra sedan källan så att huvudfilerna inkluderas som externa rubriker:
// 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
// . . .