stringtranslate.com

incluir directiva

Muchos lenguajes de programación y otros archivos de computadora tienen una directiva , a menudo llamada include, importo copy, que hace que el contenido del archivo especificado se inserte en el archivo original. Estos archivos incluidos se llamanarchivo de encabezado ocuadernos. A menudo se utilizan para definir el diseño físico de los datos del programa, piezas de código de procedimiento y/odeclaraciones directasal mismo tiempo que promuevenla encapsulacióny la reutilización de código o datos.

Archivos de encabezado

En programación de computadoras , un archivo de encabezado es un archivo que permite a los programadores separar ciertos elementos del código fuente de un programa en archivos reutilizables. Los archivos de encabezado comúnmente contienen declaraciones directas de clases , subrutinas , variables y otros identificadores . Los programadores que deseen declarar identificadores estandarizados en más de un archivo fuente pueden colocar dichos identificadores en un único archivo de encabezado, que luego puede incluir otro código siempre que se requiera el contenido del encabezado. Esto es para mantener la interfaz en el encabezado separada de la implementación . [1]

La biblioteca estándar de C y la biblioteca estándar de C++ tradicionalmente declaran sus funciones estándar en archivos de encabezado.

Algunos lenguajes compilados creados recientemente (como Java y C# ) no utilizan declaraciones directas; Los identificadores se reconocen automáticamente desde los archivos fuente y se leen directamente desde los símbolos de la biblioteca dinámica . Esto significa que los archivos de encabezado no son necesarios.

Objetivo

La includedirectiva permite desarrollar bibliotecas de código que ayudan a:

Ejemplo

Una situación de ejemplo que se beneficia del uso de una directiva de inclusión es cuando se hace referencia a funciones en un archivo diferente. Supongamos que hay algún archivo fuente C que contiene una función add, a la que se hace referencia en un segundo archivo declarando primero su existencia externa y tipo (con un prototipo de función ) de la siguiente manera:

int agregar ( int , int );  int triple ( int x ) { return agregar ( x , agregar ( x , x )); }      

Un inconveniente de este enfoque es que el prototipo de función debe estar presente en todos los archivos que utilizan la función. Otro inconveniente es que si se cambian el tipo de retorno o los argumentos de la función, sería necesario actualizar todos estos prototipos. Poner el prototipo en un archivo único e independiente evita estos problemas. Suponiendo que el prototipo se mueva al archivo add.h, el segundo archivo fuente puede convertirse en:

#incluir "agregar.h" int triple ( int x ) { return agregar ( x , agregar ( x , x )); }     

Ahora, cada vez que se compila el código, los últimos prototipos de funciones add.hse incluirán en los archivos que los utilizan, evitando posibles errores.

Ayuda de idioma

C/C++

En los lenguajes de programación C y C++ , la directiva #include de preprocesador hace que el compilador reemplace esa línea con el texto completo del contenido del archivo fuente con nombre (si se incluye entre comillas: "") o encabezado con nombre (si se incluye entre corchetes angulares: < >); [2] un encabezado no necesita ser un archivo fuente. [3] La inclusión continúa de forma recursiva en estos contenidos incluidos, hasta un límite de anidamiento definido por la implementación. Los encabezados no necesitan tener nombres correspondientes a archivos: en C++ los encabezados estándar generalmente se identifican con palabras, como "vector", por lo tanto , mientras que en C los encabezados estándar tienen identificadores en forma de nombres de archivos con una extensión ".h", como en . Un "archivo fuente" puede ser cualquier archivo, con un nombre de cualquier forma, pero lo más común es que se nombre con una extensión ".h" y se le llame "archivo de encabezado" (a veces ".hpp" o ".hh" para distinguir C++). encabezados), aunque también se pueden incluir archivos con extensiones .c, .cc y .cpp (particularmente en la técnica de unidad de compilación única ) y, a veces, se utilizan otras extensiones.#include <vector>#include <stdio.h>

Estas dos formas de #includedirectiva pueden determinar qué encabezado o archivo fuente incluir de una manera definida por la implementación. En la práctica, lo que generalmente se hace es que el formulario entre paréntesis angulares busque archivos fuente en un directorio estándar del sistema (o conjunto de directorios) y luego busque archivos fuente en rutas locales o específicas del proyecto (especificadas en la línea de comando, en una variable de entorno, o en un Makefile u otro archivo de compilación), mientras que el formulario entre comillas no busca en un directorio estándar del sistema, solo busca en rutas locales o específicas del proyecto. [4] En caso de que no haya conflicto, la forma entre paréntesis angulares también se puede utilizar para especificar inclusiones específicas del proyecto, pero esto se considera de mala forma. El hecho de que los encabezados no necesariamente correspondan a los archivos es principalmente un tecnicismo de implementación y se utiliza para omitir la extensión .h al incluir encabezados estándar de C++; en el uso común, "encabezado" significa "archivo de encabezado".

Por ejemplo:

#include <stdio.h>  // Incluye el contenido del encabezado estándar 'stdio.h' (probablemente un archivo 'stdio.h'). #include <vector>  // Incluye el contenido del encabezado estándar 'vector' (probablemente un archivo 'vector.h'). #include "usuario_definido.h"  // Incluye el contenido del archivo 'usuario_definido.h'.   

En C y C++, pueden surgir problemas si dos (o más) archivos de inclusión contienen el mismo tercer archivo. Una solución es evitar que los archivos de inclusión incluyan otros archivos, lo que posiblemente requiera que el programador agregue manualmente directivas de inclusión adicionales al archivo original. Otra solución es utilizar incluir guardias . [5]

Desde C++20 , los encabezados también se pueden importar como unidades de encabezado , es decir, unidades de traducción separadas sintetizadas a partir de un encabezado. [6] Están destinados a usarse junto con módulos . La sintaxis utilizada en ese caso es

exportar nombre-encabezado de importación opcional ;

Por ejemplo:

importar < stdio . h > ; // admitir esto es opcional import <vector> ; // admitir esto es obligatorio según el estándar export import "user_definido.h" ;      

Se proporcionan unidades de encabezado para todos los encabezados de biblioteca estándar de C++. [7]

COBOL

COBOL (y también RPG IV ) permite a los programadores copiar libros de copias en el código fuente del programa de manera similar a los archivos de encabezado, pero también permite reemplazar cierto texto en ellos con otro texto. La palabra clave COBOL para la inclusión es COPYy el reemplazo se realiza mediante la REPLACING ... BY ...cláusula. Una directiva de inclusión ha estado presente en COBOL desde COBOL 60, pero cambió desde el original INCLUDE[8] hasta COPY1968. [9]

fortran

Fortran no requiere archivos de encabezado per se . Sin embargo, Fortran 90 y posteriores tienen dos características relacionadas: includedeclaraciones y módulos. El primero se puede utilizar para compartir un archivo común que contiene interfaces de procedimientos, muy parecido a un encabezado C, aunque no se requiere la especificación de una interfaz para todas las variedades de procedimientos Fortran. Este enfoque no se utiliza habitualmente; en cambio, los procedimientos generalmente se agrupan en módulos a los que luego se puede hacer referencia con una usedeclaración dentro de otras regiones del código. Para los módulos, el compilador genera automáticamente información de interfaz de tipo encabezado y generalmente la coloca en archivos de módulo separados, aunque algunos compiladores han colocado esta información directamente en archivos objeto. La especificación del lenguaje en sí no exige la creación de archivos adicionales, aunque las interfaces de procedimientos de módulos se propagan casi universalmente de esta manera.

Pascal

La mayoría de los compiladores de Pascal admiten la directiva del compilador $ior $include, en la que la directiva $ior $includesigue inmediatamente al inicio de un bloque de comentarios en forma de

Donde la directiva $io $includeno distingue entre mayúsculas y minúsculas y filename.pas o filename.inc es el nombre del archivo que se incluirá. (Ha sido una práctica común nombrar los archivos de inclusión de Pascal con la extensión .inc , pero esto no es obligatorio). Algunos compiladores, para evitar una recursión ilimitada, limitan la invocación de un archivo de inclusión a un número determinado, prohíben invocarse a sí mismo o a cualquier archivo actualmente abierto. , o están limitados a un máximo de un archivo de inclusión a la vez, por ejemplo, un archivo de inclusión no puede incluirse a sí mismo ni a otro archivo. Sin embargo, el programa que incluye otros archivos puede incluir varios, sólo uno a la vez.

PHP

En PHP , la includedirectiva hace que se incluya y evalúe otro archivo PHP. [10] Comandos similares son require, que si no se incluyen producirán una excepción fatal y detendrán el script, [11] y include_onceand require_once, que impiden que un archivo se incluya o se requiera nuevamente si ya se incluyó o se requirió, evitando las C problema de doble inclusión.

Otros idiomas

Hay muchas formas de directiva de inclusión, como por ejemplo:

Los lenguajes modernos (por ejemplo, Haskell y Java ) tienden a evitar los libros de copia o inclusiones, prefiriendo módulos y sistemas de importación/exportación para el control del espacio de nombres . Algunos de estos lenguajes (como Java y C# ) no utilizan declaraciones directas y, en cambio, los identificadores se reconocen automáticamente desde los archivos fuente y se leen directamente desde los símbolos de la biblioteca dinámica (generalmente referenciados con directivas importo using), lo que significa que los archivos de encabezado no son necesarios.

Ver también

Referencias

  1. ^ Alan Griffiths (2005). "Separación de interfaz e implementación en C++". ACCU . Consultado el 7 de mayo de 2013 .
  2. ^ Estándar C11, 6.10.2 Inclusión de archivos fuente, págs. 164-165
  3. ^ Estándar C11, 7.1.2 Encabezados estándar, p. 181, nota al pie 182: "Un encabezado no es necesariamente un archivo fuente, ni las secuencias delimitadas en los nombres de encabezado son <necesariamente >nombres de archivo fuente válidos.
  4. ^ Stallman, Richard M. (julio de 1992). "El preprocesador C" (PDF) . Archivado desde el original (PDF) el 4 de septiembre de 2012 . Consultado el 19 de febrero de 2014 .
  5. ^ Pike, Rob (21 de febrero de 1989), Notas sobre programación en C, archivo de documentos Cat-v , consultado el 9 de diciembre de 2011
  6. ^ "Fusión de módulos: P1103R3" (PDF) .
  7. ^ "P1502R1: unidades de encabezado de biblioteca estándar para C++20".
  8. ^ "Especificaciones iniciales de COBOL para un lenguaje común orientado a los negocios" (PDF) . Departamento de Defensa . Abril de 1960. p. IX-9. Archivado desde el original (PDF) el 12 de febrero de 2014 . Consultado el 11 de febrero de 2014 .
  9. ^ "La declaración COPIA". CODASYL COBOL Revista de Desarrollo 1968. Julio de 1969. LCCN  73601243.
  10. ^ "incluir". php.net . El grupo PHP . Consultado el 20 de febrero de 2014 .
  11. ^ "requerir". php.net . El grupo PHP . Consultado el 20 de febrero de 2014 .

enlaces externos