C ++ extern Schlüsselwort für Funktionen. Warum nicht einfach die Header-Datei einbinden?

Wenn ich es richtig verstehe, bedeutet dies

extern void foo();

dass die Funktion foo in einer anderen Übersetzungseinheit deklariert ist.

1) Warum nicht einfach den Header mit einbeziehen, in dem diese Funktion deklariert ist?

2) Woher weiß der Linker, wo er zum Zeitpunkt der Verknüpfung nach Funktionen suchen muss?

edit: Vielleicht sollte ich klären, dass der obigen Deklaration dann die Funktion @ folg

foo();

In dieser Übersetzungseinheit ist es nie definiert.