2011-01-02 11 views
32

Mögliche Duplizieren:
What does “static” mean in a C program?Was bedeutet statisches Mittelwert in ANSI-C

Was bedeutet das static Schlüsselwort in C bedeuten?

Ich verwende ANSI-C. Ich habe in mehreren Codebeispielen gesehen, dass sie das Schlüsselwort static vor Variablen und vor Funktionen verwenden. Was ist der Zweck bei der Verwendung mit einer Variablen? Und was ist der Zweck bei Verwendung mit einer Funktion?

+0

Ich tat, aber schwierig, den genauen Zweck zu verstehen. Ich könnte wenig über die Verwendung von Variablen verstehen. aber mit funktion verwenden? – Sency

+1

hast du folgendes gefunden: http://stackoverflow.com/questions/572547/what-does-static-mean-in-ac-program –

+1

... oder das: http://stackoverflow.com/questions/943280/ Unterschied zwischen statisch-in-c-und-statisch-in-c –

Antwort

57

nur als kurze Antwort gibt es zwei Verwendungen für das static Schlüsselwort, wenn Variablen definieren:

1- im Dateibereich definiert Variablen mit static Schlüsselwort, dh definierten außerhalb Funktionen sichtbar, innerhalb dass Datei. Jeder Versuch, aus anderen Dateien auf sie zuzugreifen, führt bei der Verbindungszeit zu einem nicht aufgelösten Symbol.

2- Variablen, die innerhalb eines Blocks innerhalb einer Funktion als static definiert sind, bleiben bestehen oder "überleben" bei verschiedenen Aufrufen desselben Codeblocks. Wenn sie initialisiert sind, werden sie nur einmal initialisiert. static Variablen werden normalerweise standardmäßig auf 0 initialisiert.

+8

In Bezug auf 1: statische kann auch auf Funktionen angewendet werden, auch nach außen verbergen. – datenwolf

+6

Es wurde in anderen Inkarnationen dieser Frage gesagt, aber für diejenigen, die von Google kommen, gilt streng genommen 1 für Kompilierungseinheiten nicht Dateien. – Jared

+0

@Roux Hass: "Wenn sie definiert sind initialisiert" Was bedeutet das? Wenn sie bei der Definition mit einem Wert ungleich Null initialisiert werden? – moonman239

30

staticstatic innerhalb des Rumpfes einer Funktion, dh als Variablenspeicher-Klassifikator verwendet, behält diese Variable ihren Wert zwischen Funktionsaufrufen - man könnte wohl sagen, dass eine statische Variable innerhalb einer Funktion eine globale Variable ist, die nur für diese Funktion sichtbar ist . Diese Verwendung von static macht immer die Funktion, die es in Thread unsicher verwendet wird, sollten Sie es vermeiden. Der andere Anwendungsfall ist die Verwendung von static im globalen Gültigkeitsbereich, dh für globale Variablen und Funktionen: statische Funktionen und globale Variable sind lokal in der Kompiliereinheit, dh sie erscheinen nicht in der Exporttabelle der kompilierten Binärdatei Objekt. Sie verschmutzen somit den Namensraum nicht. Es ist eine gute Idee, alle Funktionen und globalen Variablen zu deklarieren, auf die nicht von außerhalb der betreffenden Kompiliereinheit (d. H. C-Datei) zugegriffen werden kann! Beachten Sie jedoch, dass statische Variablen nicht in Header-Dateien platziert werden dürfen (außer in sehr seltenen Sonderfällen).