Bevor der Compiler ein C-Quellprogramm übersetzt, führt der Präprozessor vorbereitende Arbeiten durch.
. Mehrzeilige Quellprogramm-Aussagen werden zu einzeiligen zusammengefaßt.
. Die für das Verständnis durch den Compiler erforderlichen Grundsymbole werden durch Zwischenraumzeichen getrennt.
. Dateien, die durch #include eingeführt wurden, werden in den an den Compiler weiterzuleitenden Quellcode eingeführt. Es sind dies insbesondere die Headerdateien. Diese enthalten insbesondere Funktions-Prototypen, weiters vordefinierte Bezeichnung, Makros und dergleichen, im Falle unverständlicher Compiler-Fehlermeldungen lohnt es sich oft, die zuständige Header-Datei in den Editor zu laden und anzusehen.
. #define-Direktiven werden im geamten Quellcode durch eine vereinbarten Wert ersetzt.
Bedingte Compilierung, das heißt, Quellprogramm-Abschnitte können je nach Abhängigkeit und anderen Direktiven nach Vorliegen bestimmter Bedingungen in den an den Compiler weiterzuleitenden Quellcode eingefügt werden. Mit #define können auch Makros definiert werden. Im Unterschied zu Unterprogrammen wird hier der ganze Code in das Programm eingeführt
Fehlende #include Dateien führen zu Warnungen, die man beachten sollte. In C++ sogar zu ernsten Fehlermeldungen. Um Warnungen zu Gesicht zu bekommen, wird erst mal mit ALT-F9 nur compiliert. Nicht alle C-Routinen sind allgemein portabel, das heißt, unter beliebigen anderen Betriebssystemen ebenso verfügbar. Die Ablaufsteuerung dient dem Steuern des Ablaufs eines Programms in Abhängigkeit von Bedingungen, die sich während des Ablaufs ergeben. Für die Ablaufsteuerung stehen Schleifen und Auswahlanweisungen zur Verfügung. Um ein Assembler-Unterprogramm in ein C-Programm einzubinden, (=linken) muß der zugehörige Funktionsprototyp als extern vereinbart werden.
Die Speicherklassen eines Datenobjektes wird durch ein Speicherklassen-Attribut bestimmt. Die Speicherklasse bestimmt den Gültigkeitsbereich eines Datenobjektes. Die Sichtbarkeit wird häufig mit den Worten global und lokal beschrieben. Eine Variable kann gleichzeitig global und lokal sein. Global in dem Sinne, daß sie in dem Block, in den sie vereinbart ist. Sowie in allen untergeordneten Blöcken sichtbar ist, lokal in den Sinn daß sie aus einem übergeordnetem Blick nicht sichtbar ist.
|