Diferencia entre revisiones de «Archivo de cabecera»

Contenido eliminado Contenido añadido
ASTOROT (discusión · contribs.)
m corrección
SPZ (discusión · contribs.)
m →‎Motivación: Interfaz es una palabra femenina
Línea 65:
¿Por qué se puede compilar y enlazar este código sin problema alguno? El motivo es que el compilador se guía por la declaración en <code>main.c</code> a la hora de compilar la unidad por traducir <code>main.c</code>. Y esa declaración se ajusta con la forma de la función. Más tarde, cuando el enlazador combina las unidades de traducción ya compiladas <code>main.c</code> y <code>print-heading.c</code> (en la mayoría de implementaciones representadas como archivos <code>main.o</code> o <code>main.obj</code>), probablemente podría detectar la inconsistencia &nbsp;— pero no en C. Las implementaciones en C referencian las funciones por el nombre al nivel de archivo objeto y archivo binario, esto no incluye el valor de retorno o la lista de argumentos. El enlazador encuentra una referencia a <code>print_heading()</code> en <code>main.o</code> y una función adecuada en <code>print-heading.o</code>. Llegado este punto, toda la información relativa a tipos de argumentos de funciones se pierde.
 
¿Cómo es entonces posible llevar a cabo declaraciones múltiples sin problema alguno? La solución se llama ''header file''. El ''header file'' de un módulo declara cada función, objeto y tipo de dato que forma parte delde la ''interfaz públicopública'' del módulo&nbsp;— por ejemplo, en este caso el ''header file'' incluiría sólo la delcaración de <code>add</code>. Todo aquel archivo fuente que se refiera a <code>add</code> usa la directiva <code>#include</code> en el ''header file'':
 
<source lang="c">
Línea 101:
</source>
 
Normalmente, los programadores sólo utilizan los ''header files'' para especificar loslas [[interfaz|interfaces]], y suelen aportar al menos, una pequeña cantidad de información explicando cómo usar los componentes declarados en el archivo. Al igual que en este ejemplo, las implementaciones de subrutinas permanecen en un archivo fuente separado, que continúa siendo compilado de forma independiente. (Una excepción común entre C y C++ son las "[[función inline|funciones inline]]", que suelen incluirse en ''header files'' porque la mayoría de implementaciones no pueden expendir funciones ''inline'' de forma adecuada sin ver sus definiciones durante el [[tiempo de compilación]].)
 
== Alternativas ==