C: Warum enthalten wir Header-Dateien, die deklarieren, aber nicht definieren?

uf einem hohen Niveau, ich verstehe, wir verwenden#include -Anweisungen, um Code aus anderen Dateien für die aktuelle Datei verfügbar zu machen. Aber ich verstehe nicht, warum wir eine Header-Datei einfügen, die Deklarationen, aber keine Definitionen enthält.

Möglicherweise muss ich mehr über den Kompilierungs- / Verknüpfungsprozess erfahren, um die Mechanik vollständig zu verstehen, aber gibt es ein übergeordnetes Konzept, das ich zu Beginn nicht verstehe?

Bearbeite: Alle Antworten haben dazu beigetragen, meine Frage zu klären, die sich wie folgt zusammensetzt: Wenn wir dem Compiler mitgeteilt haben, dass eine Funktion an einer anderen Stelle definiert ist, wie findet er heraus, wo diese Definition zu finden ist?