2010-11-21 10 views
17

Sind globale Variablen standardmäßig in C static oder extern?
Wenn globale Variablen standardmäßig statisch sind, bedeutet dies, dass wir auf sie in einer einzigen Datei zugreifen können, aber wir können auch globale Variablen in verschiedenen Dateien verwenden.
Bedeutet dies, dass sie standardmäßig externen Speicher haben?globale Variable in C sind statisch oder nicht?

Antwort

30

Wenn Sie keine Speicherklasse angeben (also die Schlüsselwörter extern oder static), haben globale Variablen standardmäßig eine externe Verknüpfung. Vom C99-Standard:

§6.2.2 Linkages von Identifikatoren

3) Wird die Erklärung einer Dateibereichskennung für ein Objekt oder eine Funktion, die Speicherklassen Spezifizierer static enthält die Kennung hat interne Verbindung.

5) Wenn die Deklaration eines Bezeichners für eine Funktion keinen Speicherklassenbezeichner hat, wird ihre Verknüpfung genau so festgelegt, als wäre sie mit dem Speicherklassenspezifizierer extern deklariert. Wenn die Deklaration eines Bezeichners für ein Objekt den Dateibereich und keinen Speicherklassenspezifizierer hat, ist seine Verknüpfung extern.

Also selbst wenn Sie nicht geben Sie die extern Schlüsselwort, Globals noch durch andere Quelldateien (sog Übersetzungseinheiten) zugegriffen werden, weil sie noch eine extern Erklärung für die gleiche Variable haben. Wenn Sie das Schlüsselwort static zum Angeben der internen Verknüpfung verwenden, wird selbst bei einer extern Deklaration für denselben Variablennamen in einer anderen Quelldatei auf eine andere Variable verwiesen.

+1

auch relevant : Abschnitt 6.9.2, der vorläufige Definitionen beschreibt; §4 dieses Abschnitts zeigt explizit, wie mehrere Definitionen von File-Scope-Variablen interagieren – Christoph

+0

Danke Sir ........ Können Sie bitte erklären, was ist "statisch extern varx" ?? – Mishthi

+0

@Mishthi: Meinst du eine Variable, die sowohl statisch als auch extern ist? Ich fürchte, das ist nicht möglich. –

6

In C, eine globale Variable, die keine Initialisierungswerte oder keine Speicherklasse Bezeich haben eine vorläufige Definition einer Variablen mit statischer Speicherdauer und externer Bindung.

In einer Übersetzungseinheit werden alle vorläufigen Definitionen und bis zu einer nicht provisorischen Definition (z. B. aus einer Deklaration mit einem Initialisierer) zu einer einzigen Definition für eine Variable zusammengefasst. Obwohl es nicht erlaubt ist, eine Definition derselben Variablen in mehreren Übersetzungseinheiten zu haben, ist es eine übliche Erweiterung, "gemeinsame" Variablen zuzulassen, d. H. Vorläufige Definitionen der gleichen Variablen in mehreren Übersetzungseinheiten.

3

Globale Variablen in C sind standardmäßig extern .. (dh) sie externe Bindung haben ..

Um die externe Bindung zu beschränken, ‚statische‘ Speicherklassen-Bezeichner kann für die globale Variable verwendet werden .. wenn statische Spezifizierer verwendet wird, dann wird die Variable Umfang Datei .. Sie es nicht in einer anderen Datei verknüpfen können das ‚extern‘ Schlüsselwort ..

Angabe ‚statisch‘ ist abhängig von Ihrer Nutzung des Programms ..