Duda - Proceso de compilación

Iniciado por criskapunk, 9 Diciembre 2012, 22:48 PM

0 Miembros y 2 Visitantes están viendo este tema.

criskapunk

Buenas. Tengo una consulta.

Según tengo entendido previo a la compilación de un programa en C, el compilador llama automáticamente al preprocesador el cual, siguiendo las órdenes definidas en las directivas del preprocesador, modifica el archivo con el código fuente (incluye el contenido de los archivos .h, etc).
Luego viene el momento de la compilación en el cual se traduce todo el programa a código objeto, pero dejando huecos libres. El enlazador es quien completa esos huecos, introduciendo las llamadas a las funciones de biblioteca que existan en el programa.

Mi duda es. Si el preprocesador ya se encargó de introducir el contenido de los archivos de cabecera, por que durante la compilación se dejan esos espacios libres? Es decir, no entiendo que función cumple el linker si las funciones que son llamadas en el programa ya están definidas dentro del mismo.

Un saludo y gracias.

naderST

No necesariamente, por lo general en los archivos de cabecera (.h) se tiene son los prototipos de las funciones, pero la definición de las mismas se encuentran en otros archivos externos bien sea otro .c o un archivo de librería. El linker se debe encargar de enlazar todos estos archivos en un mismo archivo.

criskapunk

@naderST:
A que te referís con prototipos de funciones?

Gracias.

naderST

Por ejemplo supongamos que tenemos una función que se llama imprimir(). Su prototipo sería el siguiente


void imprimir();


Esto es lo que tendría nuestro archivo de cabecera (.h), ahora la definición de la misma pudiera estar en un .c el cual enlazaremos luego. La definición pudiera ser la siguiente:


void imprimir()
{
       printf("Esto es una prueba\n");
}

x64core

Cita de: criskapunk en 10 Diciembre 2012, 00:07 AM
@naderST:
A que te referís con prototipos de funciones?

Gracias.

Leer un tutorial basico acerca de C/C++

criskapunk

@naderST:
Entonces, cual es la función de tener un archivo de cabecera si la función está declarada en otro archivo?

@RHL:
Muchas gracias por la respuesta completamente inútil.

Un saludo.

naderST

 
Cita de: criskapunk en 11 Diciembre 2012, 03:08 AM
@naderST:
Entonces, cual es la función de tener un archivo de cabecera si la función está declarada en otro archivo?

Básicamente indicarle al compilador el prototipo o interfaz de la función que se está llamando. Dependiendo del standard de C que estés usando puede ser obligatorio que declares el prototipo de la función.

En el siguiente link puedes ver un ejemplo de que puede pasar si no le indicas el prototipo de la función al comilador.

http://en.wikipedia.org/wiki/Function_prototype#Uses