Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: criskapunk en 9 Diciembre 2012, 22:48 pm



Título: Duda - Proceso de compilación
Publicado por: criskapunk en 9 Diciembre 2012, 22:48 pm
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.


Título: Re: Duda - Proceso de compilación
Publicado por: naderST en 9 Diciembre 2012, 23:19 pm
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.


Título: Re: Duda - Proceso de compilación
Publicado por: criskapunk en 10 Diciembre 2012, 00:07 am
@naderST:
A que te referís con prototipos de funciones?

Gracias.


Título: Re: Duda - Proceso de compilación
Publicado por: naderST en 10 Diciembre 2012, 00:17 am
Por ejemplo supongamos que tenemos una función que se llama imprimir(). Su prototipo sería el siguiente

Código
  1. void imprimir();
  2.  

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:

Código
  1. void imprimir()
  2. {
  3.       printf("Esto es una prueba\n");
  4. }
  5.  


Título: Re: Duda - Proceso de compilación
Publicado por: x64core en 10 Diciembre 2012, 01:33 am
@naderST:
A que te referís con prototipos de funciones?

Gracias.

Leer un tutorial basico acerca de C/C++


Título: Re: Duda - Proceso de compilación
Publicado por: 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?

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

Un saludo.


Título: Re: Duda - Proceso de compilación
Publicado por: naderST en 11 Diciembre 2012, 03:48 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