Speicherklasse

Der Speicherklassenspezifizierer in einer Funktionsdefinition gibt für die Funktion entweder die Speicherklasse extern oder static an.

Syntax

function-definition:
declaration-specifiersopt attribute-seqopt declarator declaration-listopt compound-statement

/* attribute-seq ist Microsoft-spezifisch */

declaration-specifiers:
storage-class-specifier declaration-specifiersopt
type-specifier declaration-specifiersopt
type-qualifier declaration-specifiersopt

storage-class-specifier: /* Für Funktionsdefinitionen */
extern
static

Wenn storage-class-specifier in einer Funktionsdefinition nicht enthalten ist, wird für die Speicherklasse standardmäßig extern verwendet. Sie können eine Funktion explizit als extern deklarieren, dies ist jedoch nicht erforderlich.

Wenn die Deklaration einer Funktion den storage-class-specifier extern enthält, hat der Bezeichner dieselben Verknüpfungen wie jede sichtbare Deklaration des Bezeichners mit Dateigültigkeitsbereich. Wenn es keine sichtbare Deklaration mit Dateigültigkeitsbereich gibt, verfügt der Bezeichner über eine externe Verknüpfung. Wenn ein Bezeichner über einen Dateigültigkeitsbereich, aber nicht über storage-class-specifier verfügt, hat der Bezeichner keine externe Verknüpfung. Externe Verknüpfung bedeutet, dass jede Instanz des Bezeichners das gleiche Objekt bzw. die gleiche Funktion bezeichnet. Weitere Informationen zu Verknüpfungen und zum Dateigültigkeitsbereich finden Sie unter Lebensdauer, Bereich, Sichtbarkeit und Verknüpfung.

Funktionsdeklarationen für Blockbereiche mit einem anderen Speicherklassenspezifizierer als extern generieren Fehler.

Eine Funktion mit der Speicherklasse static wird nur innerhalb der Quelldatei angezeigt, in der sie definiert ist. Alle anderen Funktionen sind unabhängig davon, ob ihnen die Speicherklasse extern explizit oder implizit zugewiesen wurde, in allen Quelldateien im Programm sichtbar. Wenn die Speicherklasse static benötigt wird, muss diese beim ersten Vorkommen einer Funktionsdeklaration deklariert werden (sofern vorhanden) und in der Definition der Funktion deklariert werden.

Microsoft-spezifisch

Wenn die Microsoft-Erweiterungen aktiviert sind, wird einer Funktion, die ursprünglich ohne Speicherklasse (oder mit der Speicherklasse extern ) deklariert wurde, die Speicherklasse static zugewiesen, wenn sich die Funktionsdefinition in derselben Quelldatei befindet und die Definition explizit die Speicherklasse static angibt.

Beim Kompilieren mit der Compileroption „/Ze“ verfügen Funktionen, die in einem Block mit dem Schlüsselwort extern deklariert wurden, über globale Sichtbarkeit. Bei Kompilierung mit „/Za“ ist dies nicht der Fall. Auf diese Funktion sollte nicht zurückgegriffen werden, wenn die Portabilität von Quellcode zu berücksichtigen ist.

Ende Microsoft-spezifisch

Siehe auch

C-Funktionsdefinitionen