Megosztás a következőn keresztül:


Fordító figyelmeztetése (4. szint, kikapcsolva) C4464

relatív belefoglalási elérési út tartalmazza a következőt: ".."

Megjegyzések

A #include utasítás olyan elérési útvonalat tartalmaz, amely egy szülőkönyvtár-meghatározót (.. elérési út szegmenst) foglal magában.

A Visual Studio 2015 Update 1 és újabb verzióiban, ha engedélyezve van, a fordító képes észlelni és figyelmeztetést kiadni egy #include irányelvre vonatkozóan, amely egy szülőkönyvtár elérési útját tartalmazó szegmenst (..) tartalmaz. Néha olyan kódot írnak, amely a szülőkönyvtár relatív elérési útjait használja a külső kódtárak fejléceinek belefoglalásához. Ha ezek a szülőkönyvtárhoz viszonyított fejléc elérési útjai meg vannak adva a forrásfájlokban, az kockázatot jelent: A program úgy fordítható, hogy a programozó szándékától eltérő fejlécfájlt is tartalmazhat. Előfordulhat, hogy ezek a relatív útvonalak nem hordozhatók más fejlesztők buildkörnyezeteibe.

Ehelyett javasoljuk, hogy adja meg az ilyen fejlécek elérési útját a buildkörnyezetben, például a INCLUDE környezeti változóban vagy a /I (További belefoglalási könyvtárak) fordító beállítás paramétereiben. A Visual Studio IDE-ben a projekt Konfigurációs tulajdonságok>C/C++>Általános tulajdonságlapján, a További belefoglalási könyvtárak tulajdonságban állíthatja be az elérési utakat. Bár erre nincs konkrét figyelmeztetés, nem javasoljuk a szülő könyvtár elérési útvonalainak szegmenseit használni a projekt include könyvtárainak megadásakor.

A C4464 figyelmeztetés új a Visual Studio 2015 1. frissítésében, és alapértelmezés szerint ki van kapcsolva. Az alapértelmezés szerint kikapcsolt összes figyelmeztetés engedélyezésére használható /Wall . Használja a /wN4464 parancsot a C4464 engedélyezéséhez szintű N figyelmeztetésként (ahol a N érték 1 és 4 között van). További információ: A Fordító alapértelmezés szerint ki van kapcsolva. Ha tudni szeretné, hogyan tilthatja le az adott fordítóverzióban vagy után bevezetett figyelmeztetéseket, olvassa el a Fordító figyelmeztetések verzió szerint.

Example

Az irányelvekben .. elérésiút-szegmenseket használó #include forráskódfájlok akkor aktiválhatják ezt a figyelmeztetést, ha a C4464 engedélyezve van, vagy ha a /Wall beállítás meg van adva.

Ebben a példában a projektforrás C:\project\source-ban található, és egy külső könyvtár fejlécfájljai C:\other_lib\headers-ban találhatók.

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

A probléma megoldásához adja hozzá a projekt tartalmazási könyvtáraihoz az elérési utat C:\other_lib\headers. Ezután módosítsa a forrást úgy, hogy a fejlécfájlokat külső fejlécként tartalmazza:

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