21.11.2013 Aufrufe

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 ...

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.

<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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!