statisch - wird nur für die Begrenzung der Umfang?
Ist die static
- Schlüsselwort in C nur verwendet für die Beschränkung der Gültigkeitsbereich einer Variablen auf eine einzelne Datei?
Muss ich wissen, wenn ich verstanden, dass dieses Recht. Bitte nehmen Sie die folgenden 3 Dateien,
Datei1.c
int a;
Datei2.c
int b;
datei3.c
static int c;
Nun, wenn die 3 Dateien zusammengefasst werden, dann wird der Variablen "a" & "b" haben sollte, eine Globale Reichweite und können aufgerufen werden, die von einer der 3 Dateien. Aber die variable "c" statisch, kann nur zugegriffen werden, aus datei3.c, richtig?
Tut static
haben eine andere Anwendung in C ? (andere als Einschränkung des Geltungsbereichs einer Variablen wie oben gezeigt?)
- die variable a & b nicht-Sichtbarkeit in anderen C-Dateien, wenn Sie "extern" werden.
- nicht ganz wahr, du wirst laufen in der Verknüpfung Probleme, wenn Sie definieren "int a;" in zwei Dateien.
- oh, und für den Datensatz. Es ist nicht eingeschränkt auf die Datei, es bezieht sich auf die compilation unit. Es ist durchaus möglich, eine ".c" - Datei in einem anderen ".c" - Datei, oder für diese Angelegenheit, deklarieren Sie eine "int a;" in einem .h-Datei. Es ist kein guter Stil, aber durchaus möglich.
- dann von einem scope-Perspektive, die Variablen a,b & c sind nur sichtbar in den jeweiligen Dateien, unabhängig von der "static" - Schlüsselwort? So, die "statisch" in dem oben tut sich nichts ?
- Sie scheinen zu leiden, eine terminologische Verwechslung. Leider, die meisten Leute hier tun. Bitte beenden Sie das mischen der Thermen "Sichtbarkeit", "scope" und "Verknüpfung". IDS sind immer sichtbar in nur einer übersetzungseinheit: ab dem Punkt der Deklaration und dem Ende der Einheit. Der Bereich, wo die Bezeichner sichtbar ist, wird als "scope". I. e., "scope" und "Sichtbarkeit" ist die gleiche Sache, und es ist immer lokal auf eine einzelne übersetzungseinheit. Nun, "Verknüpfung" ist ein globaler Begriff. Bindung ist die Fähigkeit, link auf das gleiche Objekt aus einer anderen übersetzungseinheit.
- Objekte mit externer Bindung verknüpft werden können, um aus einer anderen translation unit (indem Sie es). Objekte mit internen Bindung kann nicht verknüpft werden, um aus einer anderen übersetzungseinheit. Das ist es, was
static
- regler- Gestänge.static
keinen Einfluss auf den Umfang (und Sichtbarkeit).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
static
Schlüsselwort dient zwei unterschiedlichen Zwecken in C, was ich Anruf-Dauer (die Lebensdauer eines Objekts) und die Sichtbarkeit (wo können Sie ein Objekt aus). Halten Sie im Verstand der C-standard verwendet verschiedene Worte für diese zwei Konzepte, aber ich habe festgestellt, das unterrichten der Sprache, es ist am besten, um den täglichen Bedingungen, um mit zu beginnen.Beim Einsatz auf Datei-Ebene (außerhalb einer Funktion), es steuert die Sichtbarkeit. Die Dauer der definierten Variablen auf Datei-Ebene bereits definiert als die gesamte Dauer des Programms, so brauchen Sie nicht
static
für, die.Statische Variablen auf file-Ebene sind unsichtbar für alles, was außerhalb der übersetzungseinheit (der linker kann es nicht sehen).
Wenn bei Funktion Ebene (innerhalb einer Funktion), es steuert die Dauer. Das ist, weil die Sichtbarkeit ist bereits definiert als lokale Funktion.
In diesem Fall die Dauer der Variablen der gesamten Dauer des Programms und der Wert wird beibehalten, zwischen den aufrufen der Funktion.
static
hat keine Auswirkung auf die Sichtbarkeit.static
hat keine Wirkung auf den Umfang.Sind Sie missbrauchen den Begriff "Bereich".
static
in C absolut nichts zu tun hat mit Umfang.Umfang ist die region, wo Sie den Namen einer Entität (variable, Funktion, typename, etc.) ist sichtbar. In der C-Sprache "file scope" ist der größte Umfang je. Aus diesem Grund, es gibt keine Begrenzung, alles in einer einzigen Datei: es gibt einfach nichts größeres zu begrenzen. Es gibt keine solche Sache als "global scope" in C. Der Ausdruck "globaler Geltungsbereich" wird manchmal auch informell verwendet, aber in diesem Fall hat es die gleiche Bedeutung wie "file scope".
Wieder
static
in C absolut nichts zu tun hat mit Umfang.static
in C auf Lagerung Dauer eines Objekts und Verknüpfung von einem Bezeichner. Wenn verwendet, mit der Objekte (Variablen)static
gibt das Objekt statische Speicher Dauer (d.h. das Objekt existiert solange das Programm läuft). Und, wenn verwendet mit IDS von nicht-lokalen Objekten oder Funktionen, es gibt Ihnen interne Verlinkung, was bedeutet, dass die gleichen Bezeichner bezieht sich auf die gleiche Entität innerhalb einer einzelnen übersetzungseinheit (wo das Element definiert ist), aber nicht in anderen übersetzungseinheiten.C
Programmiersprache-Buch (K&R) Sie sagen, dass die Verwendungen von statischen, ist die Begrenzung des Umfangs, in dem ist eher verwirrend, weil nur vor, dass Sie sagen, dass der größte Anwendungsbereich ist die Datei Bereich. Was ist deine Meinung dazu? Er hat es immer verwirrt mich.static
wird auch in die definition einer Funktion eine variable definieren, die behält Ihren Wert zwischen den Funktionsaufrufen. Ich fand hier ein Beispiel. Im Gegensatz dazu werden Variablen, die neu erstellt werden mit jedem Funktionsaufruf aufgerufen werden automatische.Ein Beispiel zu vermehren Kinopiko Antwort:
Diese werden zum Beispiel verwendet, um wieder eine sichere Zeiger auf eine lokale variable, Funktion. Oder in Objective-C ist es manchmal verwendet, um Schutz gegen wiederholte Klasse Initialisierung:
foo()
von aaa.c ist das gleiche wie der Aufruf von foo.c: die "interne" variable wird aktualisiert, und der aktualisierte Wert wird zurückgegeben.Eine variable kann drei Arten von Speicher:
Globale Variablen sind immer gespeichert, die im statischen Bereich. Aber zum speichern eine lokale variable im statischen Bereich, müssen Sie das Schlüsselwort
static
. Als statische variable wird nicht zugewiesen Stapel, können Sie auf die variable, die bei nachfolgenden aufrufen.Auch
static
Schlüsselwort at global scope gibt eine variable interne Verlinkung.Folglich kann die variable nicht zugegriffen werden aus einer anderen Datei mit derextern
qualifier.Sind Sie richtig, dies nennt man "statische Bindung": die Zeichen, Die erklärt, wie
static
ist nur in der compilation unit, wo es definiert ist.Die weitere Nutzung
static
wäre innerhalb einer Funktion:In diesem Fall ist die variable nur einmal initialisiert und behält es Wert ist, durch verschiedene Aufrufe der Funktion, wie es wäre eine Globale variable. In diesem Beispiel ist der
counter
variable zählt die Anzahl der Zeiten, die die Funktion aufgerufen wurde.interne Verlinkung vs externe Bindung Beispiel durch
//file1.c
wenn wir kompilieren dieses Programm und starten Sie dieses Programm dann os wird geladen, das Programm im Speicher.dann unten Dinge geschehen:
glb_var identifier gespeichert werden, initialisiert Daten-segment.
counter-id wird gespeichert in nicht-initialisierten Daten-segment genannt ".bss".
Damit die Ausgabe des Programms:
0 5 10
eine wichtige Sache, über die statische variable, ist, dass es interne Verlinkung.so können wir auf diese variable auf eine bestimmte Datei.In dem Sie definiert sind (nicht in der anderen Datei).
Haben wir Zugriff auf Globale variable glb_var in andere Datei mit extern-Schlüsselwort.
für zB:
//Datei2.c
Ausgabe: 3
dies wird als externe Verknüpfung.