Speicherklasse
Der Speicherklassenspezifizierer in einer Funktionsdefinition gibt für die Funktion entweder die Speicherklasse extern
oder static
an.
Syntax
function-definition
:
declaration-specifiers
opt attribute-seq
opt declarator
declaration-list
opt compound-statement
/* attribute-seq
ist Microsoft-spezifisch */
declaration-specifiers
:
storage-class-specifier
declaration-specifiers
opt
type-specifier
declaration-specifiers
opt
type-qualifier
declaration-specifiers
opt
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