Globale Variable
Globale Variable sind Variable, die außerhalb einer Funktion deklariert werden. (Für diese Variable ist kein spezielles Schlüsselwort nötig.) Sie sind in allen Funktionen sichtbar, vor denen sie deklariert wurden. Ihre Lebensdauer ersteckt sich auf die Ausführungsdauer des Programms. Soll aus einer separat compilierten Datei auf eine in einer anderen Datei definierten globale Variable zugegriffen werden, so ist diese Variable mit dem Schlüsselwort extern bekanntzumachen.
Beispiel:
001 /* Quelltext 1 */ 001 /* Quelltext 2 */
002 #include<stdio.h> 002
003 003 extern int var_g;
004 void remote(void); 004 void remote(void) {
005 int var_g = 10; 005 var_g = 20;
006 006 }
007 int main(void) {
008 printf("%d\n", var_g);
009 remote();
010 printf("%d\n", var_g);
011 return 0;
012 }
Ausgabe:
========
10
20
Die Speicherklasse auto
Gibt man bei der Definition einer lokalen Variablen keine Speicherklasse an, so erhält man eine sog. automatische Variable. Für lokale Variable sind die Definitionen
int i;
und
auto int i;
identisch. Lokale automatische Variable werden im Stack abgelegt. Die Lebensdauer einer
automatischen Variablen beginnt mit dem Funktionsaufruf und endet mit dem Verlassen
der Funktion. Automatische Variable werden also automatisch wieder aus dem Speicher
entfernt.
Die Speicherklasse static
Lokale automatische Variable können zwischen zwei aufeinanderfolgenden Aufrufen der
Funktion ihren Wert nicht beibehalten, da sie mit jedem Funktionsaufruf neu angelegt
werden. Variable der Speicherklasse static sind lokale Variablen und damit nur
innerhalb einer Funktion sichtbar. Allerdings werden sie nicht am Stack angelegt und
behalten ihren Speicherplatz und damit auch ihren Wert zwischen zwei Funktionsaufrufen.
Diese Variablen werden auch immer mit Null initialisiert. Die Speicherklasse static
bedeutet also, dass die Variable nur innerhalb einer Funktion sichtbar ist, obwohl ihre
Lebensdauer nicht auf den Zeitraum des Aufrufes dieser Funktion beschränkt ist. In
folgendem Beispiel wird mit Hilfe der statischen Variablen i mitgezählt, wie oft die
Funktion func() bereits aufgerufen wurde.
001 #include<stdio.h>
002
003 void func(void);
004
005 int main(void) {
006 int k;
007
008 for(k = 1; k <= 5; k++)
009 func();