Compilador (C)

C tienes muchos compiladores en este caso vamos a hablar de gcc. Este es un programa que convierte el código en C a código máquina.

El compilador también llama al enlazador (linker) y tiene deferentes opciones

  1. gcc -o ejecutable : esta opción hace que se genere un fichero ejecutable que se llama "ejecutable" por defecto a.out
  2. -c hace que no se llame al enlazador (y se obvien todos las funciones más allá de las definiciones )
    Esta opción se usa por diferentes motivos.
    • La posibilidad de compilar una sola parte porque sabes que la otra funciona de manera correcta con su ahorro de tiempo.
    • Encontrar más rápido un fallo o más localizado
    • Cada fichero compilado es una estructura independiente una vez generado y reutilizable por otros programas.
  3. para enlazar todos los programas compilados se llama al compilador(gcc) y posteriormente se nombran todos los ficheros objeto (con extensión .o)

Aunque en estos momentos los procesadores sean lo suficientemente rápidos compilando como para que no suponga un problema el tiempo de compilación, la modularidad y la organización si que es un factor muy importante. Si linkeamos los fragmentos de código sin compilar previamente, el efecto será como si se sustituyesen los ficheros enlazados en la referencia "include" y posteriormente se compilará.
Uno de los problemas que me he encontrado al enlazar ficheros no compilados es que si un fichero necesitaba un tercer fichero con funciones que también se demandan desde el primero, al ir copiando código, el tercer fichero se copia 2 veces una cuando lo llamo desde el primero y otra después cuando el segundo fichero lo llama también lo que genera un problema de compilación porque hay dos funciones que se llaman igual (una escrita 2 veces claro)

En esta imagen se muestra un ejemplo de programa estructurado. los ficheros ".c" se pueden compilar por separado , son necesarias las cabeceras de los programas ".h" para poner las declaraciones de las funciones de los ficheros enlazados.

En nuestro caso "fic.c" no tiene cabecera , es por que es el archivo que contiene la función main (esta función solo la puede tener el) y hay un fichero var.h , ese fichero no tiene código pero si variables para inicializar el programa principal