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.

48 2. Datentypen und Variablen<br />

besitzen e<strong>in</strong>en genau def<strong>in</strong>ierten Datentyp! Mit Preprocessor-Macros erreicht<br />

man nur e<strong>in</strong>e re<strong>in</strong> textuelle Ersetzung im Code, die ke<strong>in</strong>e Typensicherheit<br />

bietet.<br />

Wie man am folgenden Beispiel sehen kann, ist die Def<strong>in</strong>ition von Konstanten<br />

völlig <strong>in</strong>tuitiv (const_demo.cpp):<br />

1 // const demo . cpp − a t<strong>in</strong>y demo program f o r the use o f<br />

2 // typesafe constant d e f i n i t i o n s <strong>in</strong> <strong>C++</strong><br />

3<br />

4 #<strong>in</strong>clude <br />

5<br />

6 const unsigned short RED PART = 0 ;<br />

7 const unsigned short GREEN PART = 1;<br />

8 const unsigned short BLUE PART = 2 ;<br />

9<br />

10 const unsigned short MAX COLOR INTENSITY = 0xFF ;<br />

11 const unsigned short MIN COLOR INTENSITY = 0 x00 ;<br />

12<br />

13 <strong>in</strong>t ma<strong>in</strong> ( <strong>in</strong>t argc , char ∗ argv [ ] )<br />

14 {<br />

15 // constants do not need to be g l o b a l , the same<br />

16 // r u l e s apply f o r the scope o f constants that<br />

17 // are v a l i d f o r v a r i a b l e s <strong>in</strong> <strong>C++</strong><br />

18 const unsigned short NUM COLOR CHANNELS = 3;<br />

19<br />

20 unsigned short rgb value [NUM COLOR CHANNELS] ;<br />

21<br />

22 rgb value [RED PART] = MAX COLOR INTENSITY;<br />

23 rgb value [GREEN PART] = MIN COLOR INTENSITY;<br />

24 rgb value [BLUE PART] = MIN COLOR INTENSITY;<br />

25<br />

26 return ( 0 ) ;<br />

27 }<br />

Ich denke, es erübrigt sich, dieses Programm genau zu erklären. Allerd<strong>in</strong>gs<br />

schaden e<strong>in</strong> paar kle<strong>in</strong>e Anmerkungen vielleicht nicht:<br />

• Wie der Name schon sagt, s<strong>in</strong>d Konstanten unveränderbar. Also wird logischerweise<br />

jeder Versuch, e<strong>in</strong>er Konstante im Programm etwas zuzuweisen,<br />

mit e<strong>in</strong>em Compilerfehler enden.<br />

• Konstanten müssen explizit auf e<strong>in</strong>en Wert <strong>in</strong>itialisiert werden. Vergisst<br />

man die Initialisierung und schreibt z.B.<br />

const unsigned short RED_PART;<br />

so wird dies vom Compiler bemängelt. Dieses Verhalten ist auch logisch,<br />

denn wozu sollte man e<strong>in</strong>e Konstante brauchen, wenn sie dann vom Compiler<br />

implizit auf 0 gesetzt werden soll?<br />

• Im Gegensatz zu Preprocessor-Macros folgen Konstantendef<strong>in</strong>itionen <strong>in</strong><br />

C ++ den Scope-Regeln, die auch für Variablen gelten.<br />

• Weil e<strong>in</strong>e Konstante nicht änderbar ist, muss auch nicht unbed<strong>in</strong>gt Speicherplatz<br />

für sie reserviert werden. Der Compiler kann nach vorheriger<br />

Überprüfung der Typenkompatibilität ihren Wert e<strong>in</strong>fach e<strong>in</strong>setzen. Dies<br />

hat zwei Konsequenzen:

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!