traduccion programacion funcion c++ include c-preprocessor

c++ - programacion - directiva#include: relativa a dónde?



include programacion (6)

Depende de la sintaxis que use en la directiva #include:

#include "path-spec" #include <path-spec>

Formulario citado: este formulario indica al preprocesador que busque archivos incluidos en el mismo directorio del archivo que contiene la instrucción #include y luego en los directorios de los archivos que incluyen (#include) ese archivo. El preprocesador luego busca a lo largo de la ruta especificada por la opción del compilador / I, luego a lo largo de las rutas especificadas por la variable de entorno INCLUDE.

Forma de ángulo y corchete: este formulario indica al preprocesador que busque primero archivos de inclusión a lo largo de la ruta especificada por la opción del compilador / I, luego, al compilar desde la línea de comando, a lo largo de la ruta especificada por la variable de entorno INCLUDE.

La ruta-especificación es un nombre de archivo opcionalmente precedido por una especificación de directorio. El nombre de archivo debe nombrar un archivo existente. La sintaxis de la ruta especificada depende del sistema operativo en el que se compila el programa.

Esta información debe estar en la documentación de su Referencia de preprocesador de C ++ específica, lo anterior se toma de este artículo en MSDN que tiene más información sobre el tema.

He buscado en The C ++ Programming Language para tratar de encontrar la respuesta a esto. Cuando #include "my_dir/my_header.hpp" en un encabezado, ¿dónde busca este archivo? ¿Es relativo al encabezado, relativo al archivo de origen que lo incluyó, o algo más?


Es relativo tanto al archivo fuente actual como a cualquier ruta de búsqueda dada (-I para gcc).



La ruta de búsqueda completa puede depender del compilador. Para Visual Studio, la documentación indica que:

(...) instruye al preprocesador a buscar archivos de inclusión en el mismo directorio del archivo que contiene la instrucción #include y luego en los directorios de los archivos que incluyen (#include) ese archivo. El preprocesador luego busca a lo largo de la ruta especificada por la opción del compilador / I, luego a lo largo de las rutas especificadas por la variable de entorno INCLUDE.


Su implementación definida. Esos #include "my_dir / xxy.hpp" en un archivo (por ejemplo foo.h) son relativos al archivo (foo.h y my_dir estarían en el mismo nivel en la jerarquía del directorio). Con algunos (¿la mayoría?) Compiladores, puede usar una bandera para usar estos <> (#include

Sé que gcc / g ++ proporciona el distintivo -I. De modo que podría usar g ++ -I / home [...] para indicar que el archivo xxy.hpp está ubicado en el directorio / home / my_dir /. No he utilizado ningún otro compilador C / C ++ desde hace un tiempo.


para la versión de GCC <= 3.0, el formulario de paréntesis angulares no genera una dependencia entre el archivo incluido y el incluido. Por lo tanto, si desea que su archivo MAKE genere automáticamente dependencias, debe usar el formulario citado para los archivos que se deben incluir en el árbol de dependencias.