Freigeben über


C-Speicherklassen

Die "Speicherklasse" einer Variablen bestimmt, ob das Element eine "globale" oder "lokale" Lebensdauer hat. Diese zwei Angaben zur Lebensdauer werden von C als "static" oder "automatic" aufgerufen. Ein Element mit einer globalen Lebensdauer ist während der gesamten Ausführung des Programms vorhanden und verfügt über einen Wert. 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 diese gesondert behandelt. Spezifische Informationen zu typedef finden Sie unter Typedef-Deklarationen. Spezifische Informationen zu __declspec finden Sie unter Speicherklassenattribute (erweitert).

Die Platzierung der Variablen- und Funktionsdeklarationen innerhalb der Quelldateien wirkt sich auch auf die Speicherklasse und die Sichtbarkeit aus. Deklarationen außerhalb von sämtlichen Funktionsdefinitionen treten auf "externer Ebene" auf. Deklarationen innerhalb von Funktionsdefinitionen treten auf "interner 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 Speichernklassenspezifizierern, die mit Funktionen verwendet werden.

Siehe auch

Konzepte

Deklarationen und Typen