Präprozessoren erschweren durch textuelle Transformationen, durch die Inklusion externer Quelltexte und durch tief verschachtelte komplexe Bedingungen das Begreifen von Zusammenhängen und die Inspektion bestehender Software-Systeme. Nahezu alle Aktivitäten im Software-Lebenszyklus, von der ersten Implementation bis hin zu Betrieb und Wartung, erfordern jedoch die Analyse von Quelltexten in Gegenwart von Präprozessor-Anweisungen. Dadurch wird die Präprozessor-Problematik zu einer wesentlichen Fragestellung im Reverse Engineering und beim Programmverstehen.

Die Präprozessoren der Sprachen C/C++, COBOL und PL/I werden hinsichtlich ihrer Fähigkeiten zur Manipulation des Quelltextes vergleichend untersucht. Zahlreiche Programmbeispiele illustrieren die durch Präprozessoren induzierten Probleme.

Zur Lösung der Präprozessor-Problematik wird ein sprachunabhängiges Repository-Schema für die Repräsentation von Präprozessor-Fakten entwickelt. Aufbauend auf diesem Repository-Schema werden graphbasierte Algorithmen und Werkzeuge realisiert, die die Kluft zwischen Präprozessor-Input und Präprozessor-Output überbrücken.