30.06.2013 Aufrufe

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

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.

138 7. Der Preprocessor<br />

Hier wird allerd<strong>in</strong>gs überprüft, ob identifier noch nicht def<strong>in</strong>iert wurde.<br />

Die letzte Anweisung wird auch verwendet, um Headers vor unbeabsichtigter<br />

Doppel<strong>in</strong>klusion und daraus resultierenden Fehlermeldungen des Compilers<br />

zu schützen. Header-Files sollten immer durch die folgenden Preprocessor<br />

Anweisungen e<strong>in</strong>gefasst se<strong>in</strong>:<br />

#ifndef filename_h___<br />

#def<strong>in</strong>e filename_h___<br />

... complete code of header ...<br />

#endif<br />

Hier steht filename_h___ für den spezifischen Namen des Headers. Im Fall<br />

unseres Files user_types.h würde also das entspechende Konstrukt folgendermaßen<br />

aussehen:<br />

#ifndef user_types_h___<br />

#def<strong>in</strong>e user_types_h___<br />

... complete code of header ...<br />

#endif<br />

7.3 Macros<br />

Die Macros werden hier absichtlich an letzter Stelle bei der Behandlung des<br />

Preprocessors erwähnt, da sie <strong>in</strong> C ++ nur noch e<strong>in</strong>e untergeordnete Bedeutung<br />

besitzen. Pr<strong>in</strong>zipiell gibt es drei Arten von Macros. E<strong>in</strong>e e<strong>in</strong>fache<br />

Def<strong>in</strong>ition e<strong>in</strong>es Identifiers haben wir bereits zuvor kennen gelernt, nämlich<br />

die Anweisung<br />

#def<strong>in</strong>e user_types_h___<br />

Diese bewirkt, dass e<strong>in</strong> Identifier namens user_types_h___ def<strong>in</strong>iert wird.<br />

Dieser ist dann mit #ifdef bzw. #ifndef überprüfbar. Neben dieser e<strong>in</strong>fachen<br />

Def<strong>in</strong>ition e<strong>in</strong>es Identifiers gibt es auch die Def<strong>in</strong>ition von nicht parametrisierten<br />

Macros. Z.B. def<strong>in</strong>iert die Anweisung<br />

#def<strong>in</strong>e MAX_LENGTH 255<br />

e<strong>in</strong>e Constant namens MAX_LENGTH, die den Wert 255 besitzt. Überall im<br />

Code, wo der Compiler auf e<strong>in</strong>e Verwendung von MAX_LENGTH stößt, wird<br />

diese textuell durch den Wert 255 ersetzt. Allerd<strong>in</strong>gs ist diese Art der Konstantendef<strong>in</strong>ition<br />

<strong>in</strong> C ++ verpönt, denn es gibt das typensichere Konstrukt<br />

der const Variablen, die stattdessen verwendet werden sollen.<br />

Weiters gibt es auch noch die Möglichkeit, parametrisierte Macros zu<br />

def<strong>in</strong>ieren. Z.B. wird durch<br />

#def<strong>in</strong>e SWAP(a,b) { <strong>in</strong>t swap = a; a = b; b = swap; }<br />

e<strong>in</strong> Macro, das das Vertauschen zweier Variablen<strong>in</strong>halte veranlasst. Jedoch<br />

wird auch von dieser Verwendung von Macros <strong>in</strong> C ++ abgeraten, da es das<br />

typensichere Konstrukt der <strong>in</strong>l<strong>in</strong>e Funktionen als Alternative gibt.<br />

Vorsicht Falle: Das zuvor gezeigte SWAP Macro ist sogar recht bösartig,<br />

denn wenn man die Klammerung der Ausdrücke zu e<strong>in</strong>em Block vergisst,

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!