3.11    Lebensdauer und Sichtbarkeit von Variablen

Die Lebensdauer einer Variablen gilt immer bis zum Ende des Anweisungsblocks, in dem sie definiert wurde. Dazu ein einfaches Beispiel:

00  // Kapitel3/lebensdauer_1.c

01 { // Anweisungsblock - Anfang
02 int ivar = 1234;
03 printf("%d\n", ivar);
04 } // Anweisungblock - Ende
05 printf("%d\n", ivar); // Fehler!!!

Im letzten Beispiel wurde innerhalb des Anweisungsblocks in Zeile (02) eine Integer-Variable mit dem Bezeichner ivar definiert. Die Ausgabe in Zeile (03) wäre noch in Ordnung, aber bei der Ausgabe in Zeile (05) wird sich der Compiler mit einer Fehlermeldung beschweren, weil hier die Variable ivar nicht mehr gültig ist. Die Variable ivar ist nur innerhalb des Anweisungsblocks der Zeilen (01) bis (04) gültig. Danach existiert sie nicht mehr. Das Problem in diesem Beispiel könnten Sie beheben, indem Sie die Variable ivar außerhalb, also vor dem Anweisungsblock in Zeile (01) notieren:

00  // Kapitel3/lebensdauer_2.c

01 int ivar = 1234;
02 { // Anweisungsblock - Anfang
03 printf("%d\n", ivar); // = 1234
04 } // Anweisungblock - Ende
05 printf("%d\n", ivar); // = 1234

Wie in Zeile (01) vereinbart, ist die Sichtbarkeit der Variablen ivar jetzt sowohl in Zeile (03) als auch in Zeile (05) gegeben. Existiert nun allerdings im Anweisungsblock eine weitere Variable ivar, greift der innere Block auf die nächstliegende gleichnamige Variable im inneren Block zu. Ein Beispiel hierzu wäre:

00  // Kapitel3/lebensdauer_3.c

01 int ivar = 1234;
02 { // Anweisungsblock - Anfang
03 int ivar = 4321;
04 printf("%d\n", ivar); // = 4321
05 } // Anweisungblock - Ende
06 printf("%d\n", ivar); // = 1234

Durch die Vereinbarung einer weiteren gleichnamigen Variablen ivar in Zeile (03) wird innerhalb des Anweisungsblocks in den Zeilen (02) bis (05) die äußere Variable ivar Zeile (01) überdeckt. Zugegeben, das Beispiel ist kein guter Stil, und die meisten Compiler geben auch hier eine Warnmeldung aus, aber es zeigt sehr schön die Sichtbarkeit von Variablen.