Dela via


Kompilatorvarning (nivå 4, av) C4464

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