Delen via


Compilerwaarschuwing (niveau 4, uit) C4464

Het relatieve include-pad bevat '..'

Opmerkingen

Een #include richtlijn heeft een pad dat een oudermapaanduiding bevat (een .. padsegment).

In Visual Studio 2015 Update 1 en latere versies, indien ingeschakeld, kan de compiler een waarschuwing detecteren en uitgeven voor een #include instructie die een bovenliggend mappadsegment (..) bevat. Code wordt soms geschreven dat gebruik maakt van relatieve paden naar de bovenliggende directory om headers uit externe bibliotheken te includeren. Wanneer deze ouderdirectory-gerelateerde headerpaden in de bronbestanden worden gespecificeerd, ontstaat er een risico: het programma kan worden gecompileerd met een ander headerbestand dan de programmeur van plan is. Deze relatieve paden zijn mogelijk niet overdraagbaar naar de buildomgevingen van andere ontwikkelaars.

In plaats daarvan raden we u aan de paden naar dergelijke headers op te geven in de build-omgeving, zoals in de INCLUDE omgevingsvariabele of in parameters voor de /I compileroptie (Extra mappen opnemen). In de Visual Studio IDE kunt u de paden instellen op de eigenschappenpagina Configuratie-eigenschappen>C/C++>Algemeen van uw project, in de eigenschap Extra inclusief mappen . Hoewel er geen specifieke waarschuwing voor is, raden we u ook niet aan om bovenliggende mappadsegmenten te gebruiken wanneer u de insluitingsmappen van uw project opgeeft.

Waarschuwing C4464 is nieuw in Visual Studio 2015 Update 1 en is standaard uitgeschakeld. Gebruik /Wall deze optie om alle waarschuwingen in te schakelen die standaard zijn uitgeschakeld. Gebruik /wN4464 om C4464 in te schakelen als een waarschuwing van niveau N (waarbij N tussen 1 en 4 is). Zie Compiler-waarschuwingen die standaard zijn uitgeschakeld voor meer informatie. Zie Compilerwaarschuwingen per compilerversie voor informatie over het uitschakelen van waarschuwingen die zijn geïntroduceerd in of na een specifieke compilerversie.

Example

Broncodebestanden die gebruikmaken van .. padsegmenten in #include richtlijnen kunnen deze waarschuwing activeren wanneer C4464 is ingeschakeld of wanneer de /Wall optie is opgegeven.

In dit voorbeeld bevindt de projectbron zich in C:\project\source en bevinden de headerbestanden van een externe bibliotheek zich 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
// . . .

U kunt dit probleem oplossen door het pad C:\other_lib\headers toe te voegen aan de insluitingsmappen van uw project. Wijzig vervolgens de bron om de headerbestanden op te nemen als externe headers:

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