Archivos de cabecera C y compilación / enlace

Sé que los archivos de encabezado tienen declaraciones hacia adelante de varias funciones, estructuras, etc. que se utilizan en el.c archivo que 'llama' al#include, ¿derecho? Por lo que yo entiendo, la "separación de poderes" ocurre así:

Archivo de cabecera:func.h

Contiene la declaración de la función.

int func(int i);

Archivo fuente C:func.c

contiene la definición real de la función

#include "func.h"

int func(int i) {
    return ++i ;
}

Archivo fuente Csource.c (el programa "actual"):

#include <stdio.h>
#include "func.h"

int main(void) {
    int res = func(3);
    printf("%i", res);
}

Mi pregunta es: viendo que la#include es simplemente una directiva de compilación que copia los contenidos de la.h en el archivo que#include está en, ¿cómo funciona el.c ¿Sabes cómo ejecutar realmente la función? Todo lo que está recibiendo es elint func(int i);, entonces, ¿cómo puede realmente realizar la función? ¿Cómo obtiene acceso a la definición real defunc? ¿El encabezado incluye algún tipo de "puntero" que dice "¡esa es mi definición, allá!"?

¿Como funciona?

Respuestas a la pregunta(5)

Su respuesta a la pregunta