@mare_crisium: Für sowas gibt es Versionsverwaltungssysteme N kleines SVN auf der Platte hat man mit Tortoise & Konsorten ganz schnell und einfach.

@oberallgeier: Du strukturierst nur deinen Code, nicht aber das eigentliche Programm - letztendlich landet alles in einem großen File und wird erst dann kompiliert.
Wenn man richtig modularisiert (das geht auch nicht immer), hat jedes Modul einen oder mehrere Header und du greifst nur über die Deklarationen in diese(n) Header(n) auf das Modul zu.
Die Implementierung des Moduls selbst bleibt komplett verborgen, du könntest es dann jederzeit gegen eine Library austauschen oder die interne Struktur ändern, solange die Schnittstelle (die im Header definiert wird) gleich bleibt.

Leider ist das insbesondere bei hardwarenahen Sachen eine sehr schwierige Sache und führt bei konsequenter Anwendung mal zu sehr hässlichen Schnittstellen und nur suboptimalem Code.

Spätestens wenn man in C versucht, Pseudo-Objekte halbwegs sauber zu kapseln wird es seeeeehr unangenehm (mein momentaner Versuch, einen universalen (und ungenießbaren) Funkstack für die RF(M)-Reihe zu entwicklen)

mfG
Markus