Partager via


Avertissement du compilateur (niveau 4, désactivé) C4464

relative include path contains '..'

Une #include directive a un chemin d’accès qui inclut un spécificateur de répertoire parent (un .. segment de chemin d’accès).

Notes

Dans Visual Studio 2015 Update 1 et versions ultérieures, s’il est activé, le compilateur peut détecter et émettre un avertissement pour une #include directive qui contient un segment de chemin d’accès de répertoire parent (..). Le code est parfois écrit qui utilise des chemins d’accès relatifs au répertoire parent pour inclure des en-têtes provenant de bibliothèques externes. Lorsque ces chemins d’en-tête parents relatifs au répertoire sont spécifiés dans les fichiers sources, il crée un risque : le programme peut être compilé en incluant un fichier d’en-tête différent de celui prévu par le programmeur. Ces chemins relatifs peuvent ne pas être portables pour les environnements de build d’autres développeurs.

Au lieu de cela, nous vous recommandons de spécifier les chemins d’accès à ces en-têtes dans l’environnement de build, comme dans la INCLUDE variable d’environnement ou dans les paramètres de l’option de /I compilateur (Répertoires Include supplémentaires). Dans l’IDE Visual Studio, vous pouvez définir les chemins d’accès dans la page de propriétés de configuration>C/C++>Général de votre projet, dans la propriété Autres répertoires Include. Bien qu’il n’y ait pas d’avertissement spécifique pour celui-ci, nous vous déconseillons également d’utiliser les segments de chemin d’accès de répertoire parent lorsque vous spécifiez les répertoires include de votre projet.

Avertissement C4464 est nouveau dans Visual Studio 2015 Update 1 et est désactivé par défaut. Permet /Wall d’activer tous les avertissements désactivés par défaut. Permet /wN4464 d’activer C4464 comme avertissement de niveau N (où N est 1 à 4). Pour plus d’informations, consultez les avertissements du compilateur désactivés par défaut. Pour plus d’informations sur la désactivation des avertissements introduits ou après une version spécifique du compilateur, consultez avertissements du compilateur par version du compilateur.

Exemple

Les fichiers de code source qui utilisent .. des segments de chemin d’accès dans #include les directives peuvent déclencher cet avertissement lorsque C4464 est activé ou lorsque l’option /Wall est spécifiée.

Dans cet exemple, la source du projet se trouve et C:\project\source les fichiers d’en-tête d’une bibliothèque externe se trouvent dans 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
// . . .

Pour résoudre ce problème, ajoutez le chemin d’accès C:\other_lib\headers aux répertoires include de votre projet. Ensuite, modifiez la source pour inclure les fichiers d’en-tête en tant qu’en-têtes externes :

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