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?