Share via


Advertencia del compilador (nivel 4, desactivada) C4464

la ruta de acceso de inclusión relativa contiene ".."

Una directiva #include tiene una ruta de acceso que incluye un especificador de directorio primario (un segmento de ruta de acceso ..).

Comentarios

En Visual Studio 2015 Update 1 y versiones posteriores, si está habilitado, el compilador puede detectar y emitir una advertencia para una directiva #include que contiene un segmento de ruta de acceso de directorio principal (..). A veces, el código se escribe de forma que usa rutas de acceso relativas al directorio primario para incluir encabezados de bibliotecas externas. Cuando estas rutas de acceso de encabezado relativas al directorio principal se especifican en archivos de origen, crea un riesgo: el programa se puede compilar incluyendo un archivo de encabezado distinto del que pretende el programador. Es posible que estas rutas de acceso relativas no sean portables a otros entornos de compilación para desarrolladores.

En su lugar, se recomienda especificar las rutas de acceso a estos encabezados en el entorno de compilación; por ejemplo, en la variable de entorno INCLUDE o en parámetros para la opción del compilador /I (directorios de inclusión adicionales). En el IDE de Visual Studio, puede establecer las rutas de acceso de la página Propiedades de configuración>C/C++>General del proyecto, en la propiedad Additional Include Directories. Aunque no hay ninguna advertencia específica para ello, tampoco se recomienda usar los segmentos de ruta de acceso del directorio primario al especificar los directorios de inclusión del proyecto.

La advertencia C4464 es nueva en Visual Studio 2015 Update 1 y está desactivada de manera predeterminada. Use /Wall para habilitar todas las advertencias que están desactivadas de manera predeterminada. Use /wN4464 para habilitar C4464 como una advertencia de nivel N (donde N es un valor entre 1 y 4). Para más información, consulte Advertencias del compilador desactivadas de manera predeterminada. Si quiere obtener información sobre cómo deshabilitar las advertencias introducidas en una versión específica del compilador o una posterior, vea Advertencias del compilador por versión del compilador.

Ejemplo

Los archivos de código fuente que usan segmentos de ruta de acceso .. en directivas #include pueden desencadenar esta advertencia cuando C4464 está habilitada o cuando se especifica la opción /Wall.

En este ejemplo, el origen del proyecto está en C:\project\source y los archivos de encabezado de una biblioteca externa se encuentran en 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
// . . .

Para corregir este problema, agregue la ruta de acceso C:\other_lib\headers a los directorios de inclusión del proyecto. Después, cambie el origen para incluir los archivos de encabezado como encabezados externos:

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