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.