30.06.2013 Aufrufe

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

46 2. Datentypen und Variablen<br />

nicht wissen! Aus diesem Grund darf man sich niemals auf die implizite<br />

Initialisierung von Unions verlassen.<br />

Der Vollständigkeit halber möchte ich hier zum Thema union noch den Querverweis<br />

auf Kapitel 19 aus <strong>Softwareentwicklung</strong> <strong>in</strong> C anführen, <strong>in</strong> dem dieses<br />

Thema ausführlich behandelt wird.<br />

2.5 Scope und Lifetime<br />

Zwei wichtige Kenngrößen begegnen uns im Life-Cycle von Variablen: Scope<br />

und Lifetime. Dabei bezeichnet der Begriff Scope (auch: Sichtbarkeit), wo<br />

im Programm e<strong>in</strong>e Variable unter dem Namen ansprechbar ist, unter dem<br />

sie def<strong>in</strong>iert wurde. Der Begriff Lifetime (auch: Lebenszeit) bezeichnet, wie<br />

lange der Speicher, der beim Def<strong>in</strong>ieren e<strong>in</strong>er Variable angelegt wurde, erhalten<br />

bleibt. Diese zwei Größen s<strong>in</strong>d ke<strong>in</strong>eswegs äquivalent, wie von manchen<br />

Entwicklern fälschlicherweise angenommen wird!<br />

Abgesehen von e<strong>in</strong>igen Besonderheiten, die uns im Lauf der Zeit <strong>in</strong> diesem<br />

Buch noch begegnen werden, gelten für C ++ dieselben Regeln für Scope und<br />

Lifetime, wie sie auch <strong>in</strong> C Gültigkeit besitzen:<br />

• E<strong>in</strong>e Variable ist immer <strong>in</strong>nerhalb des Blocks sichtbar, <strong>in</strong> dem sie def<strong>in</strong>iert<br />

wurde und zwar genau ab dem Punkt, an dem sie def<strong>in</strong>iert wurde<br />

(man kann ja an jeder beliebigen Stelle im laufenden Code e<strong>in</strong>e Variable<br />

def<strong>in</strong>ieren).<br />

• Die Lifetime e<strong>in</strong>er Variable erstreckt sich von deren Def<strong>in</strong>ition bis zum<br />

Verlassen des umschließenden Blocks. Allerd<strong>in</strong>gs kann man als Entwickler<br />

explizit durch static-Def<strong>in</strong>itionen darauf E<strong>in</strong>fluss nehmen.<br />

• Bei Schachtelung von Blöcken können Def<strong>in</strong>itionen auftreten, bei denen Variablen<br />

äußerer Blöcke durch Variablen <strong>in</strong>nerer Blöcke “versteckt” werden.<br />

Dies passiert, wenn <strong>in</strong> e<strong>in</strong>em <strong>in</strong>neren Block e<strong>in</strong>e Variable mit demselben<br />

Namen def<strong>in</strong>iert wird, wie sie schon <strong>in</strong> e<strong>in</strong>em äußeren Block def<strong>in</strong>iert wurde.<br />

Durch e<strong>in</strong>e solche Def<strong>in</strong>ition kommt e<strong>in</strong>e äußere Variable out of Scope.<br />

• Globale Variablen werden e<strong>in</strong>em fiktiven “alles umschließenden Block” zugerechnet<br />

und dementsprechend beg<strong>in</strong>nt ihre Lifetime zu dem Zeitpunkt,<br />

zu dem ihr Initialisierungscode ausgeführt wird (noch vor Aufruf von ma<strong>in</strong>!)<br />

und dauert den gesamten restlichen Programmlauf an. Ihr Scope ist ohne<br />

explizite Deklaration aus re<strong>in</strong> compilertechnischen Gründen auf e<strong>in</strong> e<strong>in</strong>ziges<br />

File beschränkt, allerd<strong>in</strong>gs kann man den Scope durch entsprechende<br />

extern Deklaration auf andere Files erweitern.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!