| |||
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! |
| |||
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 |
| |||
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! |
| |||
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? |
| |||
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: |