Was ist die Verwendung von Static local Variable, wenn wir eine globale Variable zu den gleichen Kosten bekommen können?

8

In C wird die statische Speicherklasse verwendet, wenn eine externe Variable ihren Zweck zu den gleichen Kosten erfüllen kann, dh. Beide belegen Speicherplatz im Datensegment der ausführbaren Datei.

Ich habe viel besseren Spielraum mit externer Variable. Wenn ich will, dass der Bereich der externen Variablen spezifische Datei ist, deklariere ich diese Variable sonst nicht wo.Ich sehe viel Flexibilität mit einer globalen Variablen, die statische lokale Variable

Und wir können auf die lokale statische Variable außerhalb der Funktion verweisen, wenn wir die Adresse der Variablen haben. Der Speicher für die lokale statische Variable befindet sich im Datensegment nicht im Stapelrahmen der Funktion. Ein einzigartiges Feature bringt die statische Speicherklasse mit zum Tisch.

Ich möchte nur wissen, ob der statische Zweck einen subtilen Zweck hat, den ich nicht kenne.

    
Adi 04.04.2013, 09:58
quelle

5 Antworten

21

Sie schreiben, dass eine globale Variable einen "besseren" Bereich hat. Das ist falsch. Es hat einen größeren Umfang. Größer ist nicht besser.

Größer kann notwendig sein, wenn Sie einen Bezeichner brauchen, der an mehreren Stellen sichtbar ist, aber das ist oft nicht der Fall. Ein größerer Bereich bedeutet jedoch mehr Fehlerfreiheit. Globale Variablen verwirren die Semantik von Routinen, indem es schwieriger wird, zu erkennen, welchen Programmstatus sie verwenden und ändern, und sie erhöhen die Wahrscheinlichkeit von Fehlern, die durch das Nichtangeben einer lokalen Kennung und anderer Fehler verursacht werden.

Insbesondere kollidiert ein Bezeichner mit externer Verknüpfung mit Bezeichnern in anderen Bibliotheken. Überlegen Sie, was passiert, wenn Sie eine Physikanwendung schreiben, eine externe Kennung namens acceleration haben und mit einer Physikbibliothek verknüpft sind, die auch eine externe Kennung namens acceleration hat. Das Programm wird fehlschlagen. Aus diesem Grund sind externe Kennungen in der Regel schlecht designed.

Eine erhebliche Einschränkung unserer Fähigkeit, komplexe Software zu entwickeln und zu pflegen, ist menschliches Versagen. Ein Großteil der Programmiersprachensemantik begrenzt die Sprache, um Fehler zu vermeiden. Mit einem Raw-Computer können Sie zwei Zeiger hinzufügen, den Stapelzeiger löschen, die Bytes eines float versehentlich in ein Ganzzahlregister laden und so weiter. Gute Programmiersprachen machen diese Fehler aus Versehen schwierig.

Globale Variablen waren eine größere Fehlerquelle, bevor Scoping-Regeln zur Steuerung dieser Variablen beitrugen. Gute Programmierer begrenzen die Gültigkeitsbereiche ihrer Identifikatoren.

    
Eric Postpischil 04.04.2013, 10:38
quelle
6

Eine globale Variable ist gut, global, auf sie kann von überall zugegriffen werden.

Eine statische lokale Variable hat einen lokalen Gültigkeitsbereich. Es ist statisch, so dass die Lebensdauer über die gesamte Lebensdauer der Anwendung läuft, jedoch nur vom lokalen Bereich (ob dieser Bereich eine Funktion, ein Block oder eine Datei ist).

    
msam 04.04.2013 10:04
quelle
1

Der grundlegende Unterschied liegt im Bereich der Variablen.

1) globale Variable ist global für das gesamte Projekt. Nehmen wir an, Ihr Projekt hat 10 verschiedene Dateien, dann können alle 10 Dateien auf die globale Variable zugreifen (siehe Verwendung von extern).

2) statische Variable / Funktion kann von der Funktion / Datei verwendet werden, in der sie definiert ist. Es kann von keiner anderen Datei in Ihrem Projekt verwendet werden.

Sie können die statische Variable (in func1 () definiert) in func2 () ändern, indem Sie die Referenz der Variablen übergeben. Bitte schauen Sie sich das folgende Beispiel an,

%Vor%

Wie Sie oben sehen, hat func1 () static int i , was nicht direkt von func2 () manipuliert werden kann, aber wenn Sie die Referenz der Variablen übergeben, können Sie die Variable wie gewöhnliche Variable manipulieren.

hoffe es hilft ...

    
Kinjal Patel 04.04.2013 10:08
quelle
0

Der Unterschied zwischen lokal und global ist in erster Linie der Geltungsbereich: Sie können auf lokale Variablen nur innerhalb des Blocks zugreifen, in dem sie definiert sind, während globale Variablen sein können Zugriff von überall. Folglich können Sie nur eine Variable mit einem bestimmten Namen im globalen Gültigkeitsbereich haben, aber Sie können mehrere lokale statische Variablen in verschiedenen Funktionen haben.

Wie bei statischen globalen Variablen gegenüber externen Variablen: Ja, statische globale Variablen sind lokal für die Übersetzungseinheit (d. h. die .c Quelldatei, in der sie definiert sind).

Das Hauptanliegen hier ist also der Begriff des Umfangs, und die Speicherung kommt natürlich von dort.

    
unkulunkulu 04.04.2013 10:05
quelle
0

Der Grund, warum Sie eine lokale statische Variable verwenden sollten, ist der Gültigkeitsbereich und daher einige fehleranfällige Situationen zu vermeiden, da Sie eine lokale statische Variable nicht außerhalb der Funktion verwenden können, in der sie definiert wurde.

    
Mppl 04.04.2013 10:05
quelle