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.

22 2. Datentypen und Variablen<br />

je nach Situation, auch e<strong>in</strong>e Performancesteigerung zu erwähnen. Denn wo<br />

ke<strong>in</strong>e Variable angelegt (und <strong>in</strong>itialisiert) wird, dort wird auch ke<strong>in</strong> Speicher<br />

und ke<strong>in</strong>e Rechenleistung dafür verbraucht.<br />

Ist man tatsächlich gezwungen, Variablen aus bereits genannten Gründen<br />

explizit zu deklarieren, so geschieht dies durch Voranstellen des Keywords<br />

extern. Das Statement<br />

extern bool master_runn<strong>in</strong>g;<br />

stellt e<strong>in</strong>e solche explizite Deklaration dar. Durch diese wird dem Compiler<br />

nur mitgeteilt, dass es “irgendwo” die Variable namens master_runn<strong>in</strong>g gibt,<br />

und dass sie den Typ bool hat.<br />

E<strong>in</strong>e explizite Initialisierung von Variablen kann zusammen mit deren<br />

Def<strong>in</strong>ition vorgenommen werden, <strong>in</strong>dem man ihnen gleich direkt e<strong>in</strong>en Wert<br />

zuweist (ich setze hier mutigerweise das = Zeichen als Zuweisungsoperator<br />

als bekannt voraus :-)). Beispiele für gültige Def<strong>in</strong>itionen von Variablen, die<br />

gleich e<strong>in</strong>e Initialisierung be<strong>in</strong>halten, wären:<br />

<strong>in</strong>t count = 0;<br />

unsigned long x_coord = 0, y_coord = 0;<br />

Für den Fall, dass ke<strong>in</strong>e explizite Initialisierung wie eben beschrieben<br />

vorgenommen wird, verhält sich C ++ anders (und besser!) als C. Es wird<br />

nämlich unter bestimmten Umständen e<strong>in</strong>e implizite Initialisierung durchgeführt,<br />

was <strong>in</strong> C nicht der Fall ist.<br />

Diese bestimmten Umstände, die zu e<strong>in</strong>er impliziten Initialisierung führen,<br />

s<strong>in</strong>d Folgende:<br />

• Globale Variablen werden auf ihre entsprechenden Nullwerte <strong>in</strong>itialisiert.<br />

• Als static def<strong>in</strong>ierte lokale Variablen werden auf ihre entsprechenden Nullwerte<br />

<strong>in</strong>itialisiert.<br />

Leser, denen nicht aus C geläufig ist, was static pr<strong>in</strong>zipiell bewirkt,<br />

möchte ich auf Abschnitt 17.3 von <strong>Softwareentwicklung</strong> <strong>in</strong> C h<strong>in</strong>weisen.<br />

• Namespace Variablen werden auf ihre entsprechenden Nullwerte <strong>in</strong>itialisiert<br />

(was Namespace Variablen genau s<strong>in</strong>d, wird <strong>in</strong> Kapitel 14 noch erklärt).<br />

Entsprechende Nullwerte im S<strong>in</strong>ne der Initialisierung bedeutet, dass Zahlenvariablen<br />

auf 0 (bzw. 0.0 bei Gleitkommazahlen), Po<strong>in</strong>ter auf 0 und bool-<br />

Variablen auf false <strong>in</strong>itialisiert werden.<br />

Vorsicht Falle: Lokale Variablen (=auto-Variablen) werden nicht implizit<br />

<strong>in</strong>itialisiert. E<strong>in</strong>er der häufigsten und am schwierigsten zu lokalisierenden<br />

Fehler ist es, Variablen nicht zu <strong>in</strong>itialisieren, ihnen auch danach ke<strong>in</strong>en Wert<br />

zuzuweisen, dann aber ihren Inhalt auszulesen! Dieser Inhalt ist dann “irgende<strong>in</strong>”<br />

Wert. Das Problem, das e<strong>in</strong>en solchen Fehler so schwer lokalisierbar<br />

macht, ist der Umstand, dass ziemlich oft tatsächlich zufällig (durch Interna<br />

des Systems) e<strong>in</strong> Nullwert <strong>in</strong> der Variable steht. Damit kann es passieren,

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!