07.10.2013 Aufrufe

Vorlesungsskript - Hochschule Emden/Leer

Vorlesungsskript - Hochschule Emden/Leer

Vorlesungsskript - Hochschule Emden/Leer

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!