Source file inclusion
Incluye otro archivo de origen en el archivo de origen actual en la línea inmediatamente posterior a la directiva.
Contenidos |
Sintaxis
#include <
h-char-sequence
>
new-line
|
(1) | ||||||||
#include "
q-char-sequence
"
new-line
|
(2) | ||||||||
#include
pp-tokens
new-line
|
(3) | ||||||||
__has_include
(
"
q-char-sequence
"
)
__has_include
(
<
h-char-sequence
>
)
|
(4) | (desde C23) | |||||||
__has_include
(
string-literal
)
__has_include
(
<
h-pp-tokens
>
)
|
(5) | (desde C23) | |||||||
| new-line | - | El carácter de nueva línea |
| h-char-sequence | - |
Una secuencia de uno o más
h-char
s, donde la aparición de cualquiera de los siguientes causa comportamiento indefinido:
|
| h-char | - | Cualquier miembro del juego de caracteres fuente excepto nueva línea y > |
| q-char-sequence | - |
Una secuencia de uno o más
q-char
s, donde la aparición de cualquiera de los siguientes causa comportamiento indefinido:
|
| q-char | - | Cualquier miembro del juego de caracteres fuente excepto nueva línea y " |
| pp-tokens | - | Una secuencia de uno o más tokens de preprocesamiento |
| string-literal | - | Un literal de cadena |
| h-pp-tokens | - | Una secuencia de uno o más tokens de preprocesamiento excepto > |
Explicación
include
en la directiva se procesan tal como en texto normal (es decir, cada identificador actualmente definido como nombre de macro se reemplaza por su lista de reemplazo de tokens de preprocesamiento). La directiva resultante después de todos los reemplazos debe coincidir con una de las dos formas anteriores. El método mediante el cual una secuencia de tokens de preprocesamiento entre
<
y
>
par de tokens de preprocesamiento o un par de caracteres
"
se combina en un único token de preprocesamiento de nombre de cabecera está definido por la implementación.
__has_include
se evalúa como
1
si la búsqueda del archivo fuente tiene éxito, y como
0
si la búsqueda falla.
En caso de que el archivo no se encuentre, el programa está mal formado.
|
|
(desde C23) |
Notas
Las implementaciones típicas solo buscan en los directorios de inclusión estándar para la sintaxis (1). La biblioteca estándar de C está implícitamente incluida en estos directorios de inclusión estándar. Los directorios de inclusión estándar generalmente pueden ser controlados por el usuario mediante opciones del compilador.
La intención de la sintaxis (2) es buscar los archivos que no están controlados por la implementación. Las implementaciones típicas primero buscan en el directorio donde reside el archivo actual y luego recurren a (1) .
Cuando se incluye un archivo, es procesado por las
fases de traducción
1-4, lo que puede incluir, de forma recursiva, la expansión de las directivas anidadas
#include
, hasta un límite de anidamiento definido por la implementación. Para evitar la inclusión repetida del mismo archivo y la recursión infinita cuando un archivo se incluye a sí mismo, quizás de forma transitiva, comúnmente se utilizan
header guards
: todo el encabezado se envuelve en
#ifndef FOO_H_INCLUDED /* cualquier nombre mapeado únicamente al nombre del archivo */ #define FOO_H_INCLUDED // el contenido del archivo está aquí #endif
Muchos compiladores también implementan el no estándar pragma #pragma once con efectos similares: desactiva el procesamiento de un archivo si el mismo archivo (donde la identidad del archivo se determina de manera específica del sistema operativo) ya ha sido incluido.
Un resultado de
__has_include
de
1
solo significa que existe un archivo de cabecera o fuente con el nombre especificado. No significa que el archivo de cabecera o fuente, cuando se incluya, no causará un error o contendrá algo útil.
Ejemplo
|
Esta sección está incompleta
Razón: sin ejemplo |
Referencias
- Estándar C23 (ISO/IEC 9899:2024):
-
- 6.4.7 Nombres de cabecera (p: 69)
-
- 6.10.1 Inclusión condicional (p: 165-169)
-
- 6.10.2 Inclusión de archivos fuente (p: 169-170)
- Estándar C17 (ISO/IEC 9899:2018):
-
- 6.10.2 Inclusión de archivos fuente (p: 119-120)
- Estándar C11 (ISO/IEC 9899:2011):
-
- 6.10.2 Inclusión de archivos fuente (p: 164-166)
- Estándar C99 (ISO/IEC 9899:1999):
-
- 6.10.2 Inclusión de archivos fuente (p: 149-151)
- Estándar C89/C90 (ISO/IEC 9899:1990):
-
- 3.8.2 Inclusión de archivos fuente
Véase también
| Una lista de archivos de cabecera de la Biblioteca Estándar de C | |
|
Documentación de C++
para
Inclusión de archivos fuente
|