Eine static
globale Variable ist lokal für die Übersetzungseinheit , in der sie definiert ist. Wenn Sie static int a;
in zwei verschiedenen Übersetzungseinheiten definieren, werden zwei unabhängige Variablen erstellt. Wenn Sie eine nicht statische globale Variable int b;
in zwei Übersetzungseinheiten definieren, tritt ein Linkerfehler auf (Sie können jedoch extern int b;
in einer der beiden Übersetzungseinheiten verwenden, um dem Linker mitzuteilen, dass er die globale Variable verwenden soll.) die andere Übersetzungseinheit).
Sie sind beide für die gesamte Lebensdauer des Programms in Erinnerung. Die Variable, die als statisch deklariert ist, hat nur einen Gültigkeitsbereich in der Datei, in der sie deklariert ist, da auf die Variable, die ohne static deklariert wurde, von anderen Dateien mit einer externen Deklaration zugegriffen werden kann.
Ursprüngliche Quelle - Ссылка
Die Lebensdauer einer statischen Variable erstreckt sich über die gesamte Lebensdauer des Programms. Es gelten jedoch weiterhin Bereichsregeln.
Wenn Sie Ihre statische Variable außerhalb einer Methode (normalerweise am Anfang der Klasse) definieren, steht Ihre Variable von überall innerhalb dieser Klasse zur Verfügung.
Sie können den Wert dieser Objekte nicht ändern. Sie werden normalerweise zum Speichern von Dingen wie API-Schlüsseln verwendet.
a
hat interne Verknüpfungen. b
hat eine externe Verknüpfung.
C99 6.2.2
6.2.2 Verknüpfungen von Identifikatoren
1) Ein Identifier, der in verschiedenen Bereichen oder im gleichen Umfang mehr als einmal deklariert werden kann gemacht, um auf dasselbe Objekt oder dieselbe Funktion durch einen als Verknüpfung bezeichneten Prozess Bezug zu nehmen. Es gibt drei Arten von Verknüpfungen: extern, intern und keine.
2) In der Menge der Übersetzungseinheiten und Bibliotheken, die jeweils ein ganzes Programm bilden Deklaration eines bestimmten Identifikators mit externer Verknüpfung bezeichnet das gleiche Objekt oder Funktion. Innerhalb einer Übersetzungseinheit jede Deklaration eines Identifikators mit internem Verknüpfung bezeichnet dasselbe Objekt oder dieselbe Funktion. Jede Deklaration eines Identifikators mit Nr Verknüpfung bezeichnet eine eindeutige Entität.
3) Wenn die Deklaration eines Dateibereichsbezeichners für ein Objekt oder eine Funktion den Speicher enthält, Klassenspezi fi kation statisch, der Identifizierer hat eine interne Verbindung .
Tags und Links c