Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Diferencia entre preprocesador y enlazador

Estas en el tema de Diferencia entre preprocesador y enlazador en el foro de C/C++ en Foros del Web. Estoy confundido con las funiones de cada uno. Tengo entendido que el preprocesador, por ejemplo, mediante la directiva #include incluye un archivo que contiene las ...
  #1 (permalink)  
Antiguo 01/05/2014, 12:15
 
Fecha de Ingreso: octubre-2008
Mensajes: 66
Antigüedad: 15 años, 6 meses
Puntos: 1
Diferencia entre preprocesador y enlazador

Estoy confundido con las funiones de cada uno. Tengo entendido que el preprocesador, por ejemplo, mediante la directiva #include incluye un archivo que contiene las funciones que luego el compilador utiliza. Pero eso no lo hace también el enlazador? Les pido que me lo expliquen en cristiano por favor. Gracias!
  #2 (permalink)  
Antiguo 01/05/2014, 12:38
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 11 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
  #3 (permalink)  
Antiguo 01/05/2014, 14:25
 
Fecha de Ingreso: mayo-2014
Ubicación: Cali
Mensajes: 6
Antigüedad: 10 años
Puntos: 0
Respuesta: Diferencia entre preprocesador y enlazador

Amigo son totalmente distintas las funcionalidades de ambos. Si quieres visita este post que escribí, alli explico VISUALMENTE como trabajan ambos.

http://cprogramacionc.blogspot.com/2014/04/programacion-c-compilacion-enlazado.html

Espero te sea de ayuda!
  #4 (permalink)  
Antiguo 01/05/2014, 18:34
 
Fecha de Ingreso: octubre-2008
Mensajes: 66
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Diferencia entre preprocesador y enlazador

Muchas gracias a ambos por sus respuestas. La que más habría entendido es la de jamesreveu que me habría posibilitado especificar mas mi duda: el preprocesador incluye archivos de cabecera .h ¿Los cuales contienen la información para ejecutar las funciones como printf? Luego el enlazador incluye las librerías .lib ¿Las cuales contienen información para ejecutar las funciones como printf?
  #5 (permalink)  
Antiguo 01/05/2014, 19:08
 
Fecha de Ingreso: octubre-2008
Mensajes: 66
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Diferencia entre preprocesador y enlazador

CalgaryCorpus según lo que escribes significa que tanto el preprocesador como el enlazador incorporan partes de alguna biblioteca para que las funciones funcionen; salvo que el procesador incorpora las partes correspondientes a los tipos y firmas (eso no se que es, ¿es de C?) de las funciones y el enlazador incorpora las partes correspondientes a las definiciones de las funciones. ¿Entendí bien?

Etiquetas: diferencia, funcion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:15.