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