C-Speicherklassen

Die "Speicherklasse" einer Variablen bestimmt, ob das Element eine "globale" oder "lokale" Lebensdauer hat. C bezeichnet diese beiden Lebensdauern als „statisch“ und „automatisch“. Es existiert ein Element mit einer globalen Lebensdauer, das während der gesamten Ausführung des Programms einen Wert aufweist. Alle Funktionen haben eine globale Lebensdauer.

Automatischen Variablen oder Variablen mit lokaler Lebensdauer wird jedes Mal neuer Speicherplatz zugeordnet, wenn die Ausführungssteuerung an den Block übergeben wird, in dem sie definiert sind. Wenn die Ausführung zurückkehrt, haben die Variablen keine sinnvollen Werte mehr.

C stellt die folgenden Speicherklassenspezifizierer bereit:

Syntax

storage-class-specifier:
auto
register
static
extern
typedef
__declspec (extended-decl-modifier-seq) /* Microsoft-spezifisch */

Mit Ausnahme von __declspec können Sie in einer Deklaration nur einen storage-class-specifier im declaration-specifier verwenden. Wenn keine Speicherklassenspezifikation vorhanden ist, erstellen die Deklarationen in einem Block automatische Objekte.

Elemente, die mit dem auto - oder register -Spezifizierer deklariert werden, verfügen über eine lokale Lebensdauer. Elemente, die mit dem static - oder extern -Spezifizierer deklariert werden, verfügen über eine globale Lebensdauer.

Da sich typedef und __declspec semantisch von den anderen vier storage-class-specifier-Terminalen unterscheiden, werden sie gesondert behandelt. Spezifische Informationen zu typedef finden Sie unter typedef-Deklarationen. Spezifische Informationen zu __declspec finden Sie unter Erweiterte Speicherklassenattribute.

Die Platzierung der Variablen- und Funktionsdeklarationen innerhalb der Quelldateien wirkt sich auch auf die Speicherklasse und die Sichtbarkeit aus. Deklarationen außerhalb aller Funktionsdefinitionen werden als auf der „externen Ebene“ auftretend bezeichnet. Deklarationen in Funktionsdefinitionen treten auf der „internen Ebene“ auf.

Die genaue Bedeutung von jedem Speicherklassenspezifizierer hängt von zwei Faktoren ab:

  • Ob die Deklaration auf der externen oder internen Ebene auftritt

  • Ob das deklarierte Element eine Variable oder eine Funktion ist

Unter Speicherklassenspezifizierer für Deklarationen der externen Ebene und Speicherklassenspezifizierer für Deklarationen der internen Ebene finden Sie eine Beschreibung der storage-class-specifier-Terminale in der jeweiligen Deklarationsart und eine Erläuterung des Standardverhaltens, wenn der storage-class-specifier in einer Variable weggelassen wird. Unter Speicherklassenspezifizierer mit Funktionsdeklarationen finden Sie eine Erläuterung zu Speicherklassenspezifizierern, die mit Funktionen verwendet werden.

Siehe auch

Deklarationen und Typen