Speicherklassen.


In C gibt es das Konzept der 'Speicherklassen'. Sie werden verwendet, um die Lebensdauer und den Gültigkeitsbereich (Sichtbarkeit) von Variablen und/oder Funktionen zu definieren.

Welche Speicherklassen gibt es?

auto register static extern typedef

Speicherklase auto

auto wird standardmäßig für lokale Variablen eingesetzt. Objekte, die als auto definiert werden, kontrolliert der Compiler automatisch. Sie gelten nur solange wie der Bereich, in dem sie definiert wurden.

	{
	  int Count;
	  auto int Month;
	}

In diesem Beispiel werden zwei Variablen der gleichen Speicherklasse definiert. auto kann nur innerhalb von Funktionen verwendet werden, d.h. für lokale Variablen.


Speicherklasse register

register wird verwendet, wenn man eine lokale Variable in einem Register der CPU speichern möchte. Solche Variablen können nicht über Zeiger erreicht werden (sie haben keine Adresse).

	{
	  register int  Miles;
	}

register sollte nur für Variablen verwendet werden, auf die schnell zugegriffen werden muß, z.B. Zähler. Beachten Sie, daß nicht jede Variable, die als register definiert wird, auch in einem Register verwaltet wird. Vielmehr könnte sie dort abgespeichert werden. Ob, daß hängt vom Compiler und der verwendeten Hardware ab.


Speicherklasse static

Klicken Sie hier, um zu statischen Funktionen zu kommen

static wird standardmäßig bei der Definition globaler Variablen verwendet. Die beiden Variablen im Programmbeispiel unten, (count und road), haben beide das Attribut static.


     static int Count;
     int Road;

     main()
     {
       printf("%d\n", Count);
       printf("%d\n", Road);
     }

'static' kann auch innerhalb einer Funktion verwendet werden. In diesem Fall wird eine Variable nur einmal initialisiert und behält ihren Wert zwischen den Funktionsaufrufen bei. Die Initialisierung erfolgt zur Compilezeit, deshalb muß eine Konstante verwendet werden.


     void Func(void)
     {
       static Count=1;
     }

Hier ein Beispiel

Es gibt einen wichtigen Einsatzfall für 'static'. Sehen Sie sich den folgenden Quellcodean.


     char *Func(void);

     main()
     {
       char *Text1;
       Text1 = Func();
     }

     char *Func(void)
     {
       char Text2[10]="martin";
       return(Text2);
     }

'Func' liefert einen Zeiger auf einen Speicherplatz zurück, an dem 'Text2' beginnt, - aber 'Text2' hat hier die Speicherklasse auto ,  verschwindet also, wenn die Funktion beendet wird und könnte überschrieben werden. Die Lösung besteht darin, 'Text2' statisch zu deklarieren.


     static char Text2[10]="martin";

Der Speicher, der 'Text2' zugewiesen wird, bleibt während der gesamten Programmlaufzeit gebunden.


Speicherklasse extern

extern definiert eine globale Variable, die in allen Programm-Modulen sichtbar ist. Eine 'extern' Variable kann nicht initialisiert werden, weil sie nur auf eine Variable verweist, die anderswo definiert wird.



 	Source 1				Source 2
        --------				--------


	extern int count;			int count=5;

        write()					main()
        {					{
          printf("count is %d\n", count);	  write();
        }					}

'Count' in 'source 1' hat den Wert 5. Wenn 'source 1' den Wert von 'count' verändert, dann sieht 'source 2' den neuen Wert. Hier einige Beipiele.

Quellcode 1
Quellcode 2

Das Kommando zum Übersetzten könnte etwa so aussehen.

	gcc source1.c source2.c -o program

Siehe auch:

Datentypen.


Anfang Hauptindex Schlüsselwörter Funktionen

Übers.: G. Junghanns