Vorlesungsskript - Hochschule Emden/Leer
Vorlesungsskript - Hochschule Emden/Leer
Vorlesungsskript - Hochschule Emden/Leer
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
c○ Prof. Dr. B. Bartning, HS <strong>Emden</strong>/<strong>Leer</strong> Rumpfskript ” Informatik I/II“ (WS/SS 2010/11) 63<br />
(5.75c). Warum das Vermeiden eines Mehrfacheinschlusses nötig ist, wird später erläutert<br />
werden, insbesondere ab (Kap. 9).<br />
Syntax für Zeile mit einer Präprozessordirektive:<br />
Zeilenbeginn mit # (nach ggf. Zwischenraumzeichen).<br />
(5.71) Zeilenfortsetzungszeichen (für Präprozessorzeile; für Compilerzeile unnötig): \ mit sofort<br />
anschließendem ” Zeilenendezeichen“ (kein <strong>Leer</strong>zeichen); Präprozessor entfernt \ und Zeilenendezeichen,<br />
bevor er die Gesamtzeile untersucht.<br />
(5.72) Makro ohne Parameter<br />
C (C++) sehr viel benutzt für symbolische Konstanten; C++ besser: const ...<br />
C/C++ benutzt bei Definitionen für bedingte Übersetzung, s. (5.75) .<br />
(a) #define Name Textersatz<br />
Semantik: Ab dieser Zeile wird Name (als lex. Bestandteil, nicht innerhalb eines Strings)<br />
ersetzt durch Textersatz ( ” dummer“ Ersatz, unabhängig von Syntax); Textersatz darf auch<br />
<strong>Leer</strong>zeichen enthalten. Wenn Textersatz fehlt, wird Name gelöscht, d. h. durch nichts ersetzt.<br />
Bsp<br />
// Ersatz für Empfehlung in Kap. 0.3<br />
#define bool int<br />
#define true 1<br />
#define false 0<br />
(b) Beenden des Ersetzens: Quelltextende oder Auftreten von:<br />
#undef Name<br />
Danach ist Name nicht mehr als zu ersetzender Bestandteil bekannt.<br />
Ein #undef bei unbekanntem Name ist unschädlich, ein #define bei bekanntem Namen<br />
bewirkt (i. a.) einen Fehler.<br />
(5.73) Makro mit Parameter ↗ (10.12b)<br />
C++ besser: inline ... (10.12a) – wird hier noch nicht besprochen.<br />
(5.74) Einfügungen<br />
// Form 1:<br />
#include <br />
// Form 2:<br />
#include "DateiName"<br />
Einfügen von der Datei DateiName (i. a. eine sog. Header-Datei) an dieser Stelle. Befehl ist<br />
schachtelungsfähig.<br />
• Form 1: Suchen an den dem Präprozessor bekannten Stellen (i. a. Verzeichnis/se für<br />
allg. Headerdateien)<br />
• Form 2: Zunächst Suche im aktuellen Verzeichnis, dann wie Form 1; diese Form ist<br />
geeignet für eigene Headerdateien. Falls DateiName eine Pfadangabe einschließt (DOS/<br />
Windows: Zeichen ” \“ nicht doppelt im Gegensatz zu (3.25) und (5.33b)), dann Suche nur<br />
im angegebenen Pfad.<br />
△! Leider sind <strong>Leer</strong>zeichen innerhalb von < > und " " signifikant, daher Vorsicht!<br />
(5.75) Bedingte Übersetzung<br />
(a) #if KonstanterAusdruck1<br />
Textzeilen1<br />
#elif KonstanterAusdruck2<br />
Textzeilen2<br />
#else<br />
Textzeilen3<br />
#endif