Eine Einführung in die Programmiersprache C und die Grundlagen ...
Eine Einführung in die Programmiersprache C und die Grundlagen ...
Eine Einführung in die Programmiersprache C und die Grundlagen ...
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
<strong>E<strong>in</strong>e</strong> <strong>E<strong>in</strong>führung</strong> <strong>in</strong> <strong>die</strong> Informatik <strong>und</strong> <strong>die</strong> <strong>Programmiersprache</strong> C<br />
5.5 Lebensdauer<br />
Die Lebensdauer e<strong>in</strong>er Variable hängt vom Ort ihrer Def<strong>in</strong>ition <strong>und</strong> ihrer Speicherklasse ab. Globale<br />
Variablen <strong>und</strong> static-Variablen Leben solange wie das Programm läuft. Automatische <strong>und</strong> Registervariablen<br />
beg<strong>in</strong>nen zu existieren, sobald der Programmlauf bei ihrer Def<strong>in</strong>ition ankommt, <strong>und</strong><br />
hören auf zu existieren, sobald der Programmlauf den Block verlässt, <strong>in</strong> dem <strong>die</strong> Variable def<strong>in</strong>iert<br />
wurde.<br />
<strong>in</strong>t i; /* Globale Variable, lebt waehrend ganzem Programmlauf */<br />
static <strong>in</strong>t i; /* Lokale Variable, lebt waehrend ganzem Programmlauf */<br />
void Demo(<strong>in</strong>t a) /* Parameter, lebt bis zum Ende der Funktion */<br />
{<br />
<strong>in</strong>t b; /* Automatische Variable, lebt bis zum Ende der Funktion */<br />
while (a) {<br />
static <strong>in</strong>t c; /* Statische Variable, lebt waehrend ganzem Programmlauf */<br />
<strong>in</strong>t d; /* Automatische Variable, lebt bis zum Ende des Blocks */<br />
/* mehr Code */<br />
}<br />
/* mehr Code */<br />
}<br />
5.6 Sichtbarkeit<br />
Unter Sichtbarkeit versteht man, von wo aus auf e<strong>in</strong>e Variable zugegriffen werden kann. Auf Variablen,<br />
<strong>die</strong> <strong>in</strong>nerhalb von Blöcken def<strong>in</strong>iert werden, kann nur ab Def<strong>in</strong>ition <strong>in</strong>nerhalb <strong>die</strong>ses Blokkes<br />
(<strong>und</strong> dar<strong>in</strong> e<strong>in</strong>gebettete Blöcke) zugegriffen werden. Wenn ausserhalb des Blockes e<strong>in</strong>e Variable<br />
gleichen Namens existiert, wird sie durch <strong>die</strong> Blockvariable verdeckt <strong>und</strong> ist nicht sichtbar. Auf<br />
globale Variablen (ohne static ausserhalb jedes Blockes def<strong>in</strong>iert) kann von überall her zugegriffen<br />
werden, auch von anderen, zum Projekt gehörenden Modulen (In den anderen Modulen muss<br />
<strong>die</strong>se Variable aber als extern deklariert werden). Auf Modullokale (Ausserhalb jedes Blockes<br />
static def<strong>in</strong>iert) kann nur von Funktionen <strong>in</strong>nerhalb <strong>die</strong>ses Moduls (Datei) zugegriffen werden.<br />
<strong>in</strong>t i; /* Von ueberall her sichtbar (Auch anderen Dateien) */<br />
static <strong>in</strong>t i; /* Nur <strong>in</strong> <strong>die</strong>ser Datei sichtbar */<br />
void Demo(<strong>in</strong>t a) /* Nur <strong>in</strong> <strong>die</strong>ser Funktion (Demo) sichtbar */<br />
{<br />
<strong>in</strong>t b; /* Nur <strong>in</strong> <strong>die</strong>ser Funktion (Demo) sichtbar */<br />
while (a) {<br />
static <strong>in</strong>t c; /* Nur <strong>in</strong>nerhalb des while()-Blocks sichtbar */<br />
<strong>in</strong>t d; /* Nur <strong>in</strong>nerhalb des while()-Blocks sichtbar */<br />
}<br />
}<br />
5.7 Vordef<strong>in</strong>ierte Variablen<br />
[C99]<br />
In C99 ist <strong>die</strong> lokale statische Variable __func__ für jede Funktion automatisch vordef<strong>in</strong>iert,<br />
<strong>und</strong> zwar wie wenn der Programmierer<br />
static const char __func__[] = "Funktionsname";<br />
geschrieben hätte. Diese Variable enthält somit e<strong>in</strong>fach für jede Funktion den Namen<br />
der aktuellen Funktion. Damit kann <strong>in</strong> Fehlermeldungen oder Logdaten auf e<strong>in</strong>fache Art<br />
der Name der fehlerverursachenden Funktion mit ausgegeben werden. (Ohne dass der<br />
Name der Funktion nochmals e<strong>in</strong>getippt werden müsste)<br />
if (a < 0) {<br />
pr<strong>in</strong>tf("Fehler <strong>in</strong> Funktion !!\n", __func__);<br />
}<br />
Gedruckt am 10.09.2009 14:23:00 Letzte Änderung am: 10. September 2009 Version 2.4.1, I. Oesch 21/147