Wie ist es passiert, dass "static" eine Funktion / Variable ohne externe Verknüpfung in C und C ++ bezeichnet?

8

In C static kann entweder eine lokale Variable oder eine globale Funktion / Variable ohne externe Verknüpfung bedeuten. In C ++ kann es auch eine Membervariable oder Memberfunktion pro Klasse bedeuten.

Gibt es einen Hinweis darauf, wie es dazu kam, dass das static -Schlüsselwort, das für den Mangel an externer Verknüpfung völlig irrelevant ist, als Mangel an externer Verknüpfung bezeichnet wird?

    
sharptooth 06.05.2010, 08:24
quelle

4 Antworten

4

static ist ein Speicherspezifizierer. Das Wort "statisch" bedeutet unveränderlich. "Speicher" bezieht sich darauf, wo sich das Objekt im Speicher befindet, d. H. Seine Adresse.

Ein Objekt mit static Speicher befindet sich an einer konstanten Adresse.

Zufälligerweise hat ein Objekt mit extern storage auch eine konstante Adresse. Aufgrund der Art, wie C- und C ++ - Programme miteinander verknüpft sind, ist dies eine Notwendigkeit. Und weil extern das am wenigsten überraschende Verhalten ist, ist es auch der Standard.

Wenn du darüber nachdenkst, dass extern ein zusätzliches Feature zu static ist, denke ich, dass es ein bisschen mehr Sinn macht. Es ist ein wenig dumm, eine Funktion static zu deklarieren, da es keine Alternative in einer vollständig kompilierten Sprache gibt, aber die Adresse einer Funktion ist statisch, auch wenn sie nicht von außen sichtbar ist.

Der wirklich inkonsistente Teil ist also, dass Klassenmitglieder, die zwischen verschiedenen Kompilierungseinheiten geteilt werden, als static , nicht als extern ...

deklariert werden müssen     
Potatoswatter 06.05.2010, 10:54
quelle
6

Die Verwendung eines bereits vorhandenen Schlüsselworts hat den Vorteil, dass der Sprache kein neues Schlüsselwort hinzugefügt wird, wodurch bestehende Programme unterbrochen werden könnten. Es kann verwirrend sein, aber es wird als eine Art "kleineres Übel" betrachtet.

    
Francesco 06.05.2010 08:27
quelle
6

Ich nehme an, dass Sie die Verwendung von statisch zum Definieren von Variablen betrachten, die ihren Wert zwischen Funktionsaufrufen als natürlich erhalten.

Betrachten Sie Folgendes:

%Vor%

versus

%Vor%

Von func aus betrachtet, verhält sich x in beiden Fällen gleich. Der Wert bleibt zwischen aufeinanderfolgenden Aufrufen erhalten. Der Unterschied zwischen den beiden ist, wer sonst x sehen kann. In der ersten kann niemand. In der Sekunde kann jeder.

Dieses Konzept erstreckt sich auf statische Variablen im globalen Gültigkeitsbereich. Wenn Sie nur eine Variable deklarieren, kann sie jeder sehen. Wenn Sie diese Variable jedoch als statisch deklarieren, kann nur diese Datei sie sehen. Natürlich muss man berücksichtigen, dass es keinen zusätzlichen Spielraum gibt, um die Sichtbarkeit einzuschränken, aber die Idee ist da.

Die zusätzliche Bedeutung in C ++ für statische Member ist auch direkt analog zum ursprünglichen Beispiel. Eine einzelne Variable, die von allen Instanzen der Klasse gemeinsam genutzt wird.

    
Dennis Zickefoose 06.05.2010 08:47
quelle
2

Die C-Version bedeutet "statisch verknüpft" außerhalb einer Funktion.

Die C ++ - Klassenversion und C-Inside-Funktionsversionen bedeuten "statisch gespeichert", was bedeutet, dass sie nicht auto (Stapel oder lokale) Variablen oder Instanzvariablen in Klassen sind.

    
nategoose 06.05.2010 15:00
quelle

Tags und Links