Se ho capito bene, stai chiedendo come fa il compilatore a sapere che i simboli dichiarati nell'header file sono definiti nel corrispondente file .c
Il compilatore non si occupa di questo, pertanto non può saperlo.
Chi pensa a questo è il
linker (fai un ripasso delle fasi di compilazione) che, dopo che i vari file sorgenti vengono compilati in codice oggetto, si preoccupa di "risolvere" tutti i riferimenti a simboli esterni.
Se non ci riesce, ottieni il famoso messaggio di errore "undefined reference to..."
É così dichiarato che è celato! Non c'è nulla di più sfuggente dell'ovvio. (Sherlock Holmes)