Diferencia entre revisiones de «Archivo de cabecera»

Contenido eliminado Contenido añadido
→‎Motivación: corregí la palabra "declaraciones" que estaba escrita como "declaracones"
Línea 61:
</source>
 
Si el programador olvida actualizar la declaración en <code>main.c</code>, se pueden dar resultados devastadores. La función <code>print_heading()</code> espera un argumento y hace uso del valor del mismo, sin embarembargo la función <code>main()</code> no provee ningún valor. Al ejecutar este programa se produce un comportamiento impredecible: la aplicación puede imprimir basura, terminar de forma inesperada o dar pie a resultados impredecibles en la plataforma en la que es ejecutado.
 
¿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 translation unitos 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>), probablmente 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.