Avviso del compilatore (livello 4, off) C4464

il percorso di inclusione relativo contiene '.'.

Una #include direttiva include un percorso che include un identificatore di directory padre (un segmento di .. percorso).

Osservazioni:

In Visual Studio 2015 Update 1 e versioni successive, se abilitato, il compilatore può rilevare e generare un avviso per una #include direttiva contenente un segmento di percorso della directory padre (..). Il codice viene talvolta scritto che usa percorsi relativi della directory padre per includere intestazioni da librerie esterne. Quando questi percorsi di intestazione relativi alla directory padre vengono specificati nei file di origine, crea un rischio: il programma può essere compilato includendo un file di intestazione diverso da quello previsto dal programmatore. Questi percorsi relativi potrebbero non essere portabili negli ambienti di compilazione di altri sviluppatori.

È invece consigliabile specificare i percorsi di tali intestazioni nell'ambiente di compilazione, ad esempio nella INCLUDE variabile di ambiente o nei parametri per l'opzione del /I compilatore (Directory di inclusione aggiuntive). Nell'IDE di Visual Studio è possibile impostare i percorsi nella pagina delle proprietà Proprietà>di configurazione C/C++>Generale del progetto, nella proprietà Directory di inclusione aggiuntive. Anche se non è presente alcun avviso specifico, non è consigliabile usare segmenti di percorso della directory padre quando si specificano le directory di inclusione del progetto.

Avviso C4464 è una novità di Visual Studio 2015 Update 1 e disattivata per impostazione predefinita. Usare /Wall per abilitare tutti gli avvisi disattivati per impostazione predefinita. Usare /wN4464 per abilitare C4464 come avviso di livello N (dove N è 1-4). Per altre informazioni, vedere Avvisi del compilatore disattivati per impostazione predefinita. Per informazioni su come disabilitare gli avvisi introdotti in o dopo una versione specifica del compilatore, vedere Avvisi del compilatore per versione del compilatore.

Esempio

I file di codice sorgente che usano .. segmenti di percorso nelle #include direttive possono attivare questo avviso quando C4464 è abilitato o quando viene specificata l'opzione /Wall .

In questo esempio l'origine del progetto si trova in C:\project\source e i file di intestazione di una libreria esterna sono 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
// . . .

Per risolvere questo problema, aggiungere il percorso C:\other_lib\headers alle directory di inclusione del progetto. Modificare quindi l'origine in modo da includere i file di intestazione come intestazioni esterne:

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