English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Un archivo de encabezado tiene la extensión .h Este archivo contiene declaraciones de funciones C y definiciones de macros, que se comparten y se citan en varios archivos de origen. Hay dos tipos de archivos de encabezado: los archivos de encabezado escritos por los programadores y los archivos de encabezado proporcionados por el compilador.
Para usar un archivo de encabezado en un programa, es necesario usar la instrucción de preprocesamiento C #include Para citarlo. Hemos visto anteriormente stdio.h Un archivo de encabezado, que es un archivo de encabezado proporcionado por el compilador.
Citar un archivo de encabezado es equivalente a copiar su contenido, pero no copiaremos directamente el contenido del archivo de encabezado en el archivo de origen, porque hacerlo es muy susceptible a errores, especialmente cuando el programa está compuesto por varios archivos de origen.
Una práctica simple en C o C++ 程序中,建议把所有的常量、宏、系统全局变量和函数原型写在头文件中,在需要的时候随时引用这些头文件。
Sintaxis de inclusión de archivos de encabezado #include Uso de instrucciones de preprocesamiento
Se pueden referenciar archivos de encabezado de usuario y del sistema. Su forma tiene dos variantes:
#include <file> -Esta forma se utiliza para referenciar archivos de encabezado de usuario. Busca el archivo llamado file en el directorio que contiene el archivo actual. Al compilar el código fuente, puede usar
Esta forma se utiliza para referenciar archivos de encabezado del sistema. Busca el archivo llamado file en la lista estándar de directorios del sistema. Al compilar el código fuente, puede usar
#include "file" -Esta forma se utiliza para referenciar archivos de encabezado de usuario. Busca el archivo llamado file en el directorio que contiene el archivo actual. Al compilar el código fuente, puede usar
#include operaciones de inclusión de archivos de encabezado #include La instrucción siguiente indica que el preprocesador de C revise el archivo especificado como entrada. La salida del preprocesador incluye la salida generada, la salida generada por el archivo citado y
char *test(void);
y un programa principal que utiliza el archivo de encabezado program.c, como se muestra a continuación:
int x; #include "header.h" int main(void) { puts(test()); }
El compilador verá la información de código siguiente:
int x; char *test(void); int main(void) { puts(test()); }
Si un archivo de encabezado se referencia dos veces, el compilador procesará el contenido del archivo dos veces, lo que producirá un error. Para evitar esto, la práctica estándar es colocar todo el contenido del archivo dentro de una instrucción de compilación condicional, como se muestra a continuación:
#ifndef HEADER_FILE #define HEADER_FILE todo el archivo de encabezado #endif
Esta estructura se conoce comúnmente como envoltorio #ifndef. Cuando se vuelve a referenciar el archivo de encabezado, la condición es falsa porque HEADER_FILE ya está definido. En este caso, el preprocesador saltará todo el contenido del archivo, y el compilador lo ignorará.
A veces, es necesario seleccionar una referencia de varios archivos de encabezado diferentes para incluir en el programa. Por ejemplo, es necesario especificar los parámetros de configuración utilizados en diferentes sistemas operativos. Puede lograr esto mediante una serie de condiciones, como se muestra a continuación:
#if SYSTEM_1 # include "system_1.h" #elif SYSTEM_2 # include "system_2.h" #elif SYSTEM_3 ... #endif
Pero cuando hay muchos archivos de encabezado, hacer esto es muy inapropiado, el preprocesador utiliza macros para definir el nombre de los archivos de encabezado. Esto se llamareferencia condicionalNo se utiliza el nombre del archivo de encabezado como #include Los parámetros directos, simplemente utilice el nombre del macro en su lugar:
#define SYSTEM_H "system_1.h" ... #include SYSTEM_H
El SYSTEM_H se expande, el preprocesador buscará system_1.h, como #include Escribido originalmente de esa manera. El SYSTEM_H se expande, el preprocesador buscará system_ -La opción D está definida en su Makefile.