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
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