C - Archivos de encabezado
Un archivo de encabezado es un archivo con extensión .hque contiene declaraciones de funciones en C y definiciones de macros para compartir entre varios archivos fuente. Hay dos tipos de archivos de encabezado: los archivos que escribe el programador y los archivos que vienen con su compilador.
Solicita utilizar un archivo de encabezado en su programa incluyéndolo con la directiva de preprocesamiento de C #include, como has visto la inclusión de stdio.h archivo de encabezado, que viene junto con su compilador.
Incluir un archivo de encabezado equivale a copiar el contenido del archivo de encabezado, pero no lo hacemos porque será propenso a errores y no es una buena idea copiar el contenido de un archivo de encabezado en los archivos de origen, especialmente si tener varios archivos de origen en un programa.
Una práctica sencilla en los programas C o C ++ es que mantenemos todas las constantes, macros, variables globales del sistema y prototipos de funciones en los archivos de encabezado e incluimos ese archivo de encabezado donde sea necesario.
Incluir sintaxis
Tanto el usuario como los archivos de encabezado del sistema se incluyen mediante la directiva de preprocesamiento #include. Tiene las siguientes dos formas:
#include <file>
Este formulario se utiliza para archivos de encabezado del sistema. Busca un archivo llamado 'archivo' en una lista estándar de directorios del sistema. Puede anteponer directorios a esta lista con la opción -I mientras compila su código fuente.
#include "file"
Este formulario se utiliza para archivos de encabezado de su propio programa. Busca un archivo llamado 'archivo' en el directorio que contiene el archivo actual. Puede anteponer directorios a esta lista con la opción -I mientras compila su código fuente.
Incluir operación
los #includeLa directiva funciona indicando al preprocesador de C que escanee el archivo especificado como entrada antes de continuar con el resto del archivo fuente actual. La salida del preprocesador contiene la salida ya generada, seguida de la salida resultante del archivo incluido, seguida de la salida que proviene del texto después de la#includedirectiva. Por ejemplo, si tiene un archivo de encabezado header.h de la siguiente manera:
char *test (void);
y un programa principal llamado program.c que usa el archivo de encabezado, como este:
int x;
#include "header.h"
int main (void) {
puts (test ());
}
el compilador verá el mismo flujo de tokens que vería si program.c lee.
int x;
char *test (void);
int main (void) {
puts (test ());
}
Encabezados de una sola vez
Si un archivo de encabezado se incluye dos veces, el compilador procesará su contenido dos veces y generará un error. La forma estándar de evitar esto es encerrar todo el contenido real del archivo en un condicional, como este:
#ifndef HEADER_FILE
#define HEADER_FILE
the entire header file file
#endif
Esta construcción se conoce comúnmente como envoltorio #ifndef. Cuando se vuelve a incluir el encabezado, el condicional será falso, porque HEADER_FILE está definido. El preprocesador omitirá todo el contenido del archivo y el compilador no lo verá dos veces.
Computado incluye
A veces es necesario seleccionar uno de los diferentes archivos de encabezado para incluirlo en su programa. Por ejemplo, pueden especificar parámetros de configuración que se utilizarán en diferentes tipos de sistemas operativos. Puede hacer esto con una serie de condicionales de la siguiente manera:
#if SYSTEM_1
# include "system_1.h"
#elif SYSTEM_2
# include "system_2.h"
#elif SYSTEM_3
...
#endif
Pero a medida que crece, se vuelve tedioso, en cambio, el preprocesador ofrece la capacidad de usar una macro para el nombre del encabezado. Esto se llamacomputed include. En lugar de escribir un nombre de encabezado como argumento directo de#include, simplemente ponga un nombre de macro allí -
#define SYSTEM_H "system_1.h"
...
#include SYSTEM_H
SYSTEM_H se expandirá y el preprocesador buscará system_1.h como si el #includehabía sido escrito de esa manera originalmente. SYSTEM_H podría ser definido por su Makefile con una opción -D.