Arquivos de cabeçalho C e compilação / vinculação

Eu sei que os arquivos de cabeçalho têm declarações de encaminhamento de várias funções, estruturas, etc. que são usadas no.c arquivo que 'chama' o#include, certo? Tanto quanto eu entendo, a "separação de poderes" ocorre assim:

Arquivo de cabeçalho:func.h

contém declaração antecipada de função

int func(int i);

Arquivo de origem C:func.c

contém a definição da função real

#include "func.h"

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

Arquivo de origem Csource.c (o programa "atual"):

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

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

Minha pergunta é: vendo que o#include é simplesmente uma diretiva de compilador que copia o conteúdo do.h no arquivo que#include está em, como é que o.c arquivo sabe como realmente executar a função? Tudo o que está conseguindo é oint func(int i);, então como ele pode realmente executar a função? Como obtém acesso à definição real defunc? O cabeçalho inclui algum tipo de "ponteiro" que diz "essa é a minha definição, lá!"

Como funciona?

questionAnswers(5)

yourAnswerToTheQuestion