Ver Mensaje Individual
  #2 (permalink)  
Antiguo 01/05/2014, 12:38
CalgaryCorpus
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 16 años, 5 meses
Puntos: 61
Respuesta: Diferencia entre preprocesador y enlazador

En C no estas obligado a definir TODAS las funciones en un solo archivo. Puedes tener varias en otros archivos o en bibliotecas de ellas.

Si estas obligado a decir el nombre, lo que reciben y lo que retornan las funciones, pero no a tenerlas definidas. El compilador estará feliz si le provees de esas 3 cosas. Te va a reclamar si invocas una funcion o usas un tipo y el compilador no lo ha visto antes.

Los archivos .h (por ejemplo stdio.h) contienen las firmas de varias funciones, por ejemplo atoi() o printf(), etc., y si quieres usar alguna de ellas tendras que hacer #include <stdio.h> u otro similar.

Si lo olvidas, como decia, el compilador reclamará.

Si quieres que tu programa funcione, llegara el momento entonces que el enlazador diga:
- has invocado a la funcion x() (por ejemplo printf)
- pero solo conozco el nombre de ella, y lo que recibe y retorna, pero me falta su implementacion
- le indicas en algunos casos explicitamente y en otros el enlazador descubre por si mismo, donde encontrar la definicion de las funciones.
- Si has dividido tu programa en varios archivos .c, al momento de enlazar se requerira que el enlazador lo tenga a mano, sino va a reclamar que no puede encontrar la definicion de una funcion que esta siendo invocada.

En resumen:
#include para incorporar tipos y firmas
enlazador para definiciones (tuyas en otros archivos o provenientes de bibliotecas de funciones)

Enlazar en rapidisimo comparado con compilar.
Puedes poner funciones al interior de los archivos .h, pero te daras cuenta que no tiene sentido andar compilando a cada rato algo si se puede tener algo compilado de antes y solo enlazar al final.
__________________
Visita mi perfil en LinkedIn