Sind die globalen Variablen standardmäßig extern oder entspricht dies der globalen Variablen extern?

8

Ich habe zwei Fragen beantwortet,

statische und externe globale Variablen in C und C ++

globale Variable in C sind statisch oder nicht?

Beide Fragen sagen die zwei Dinge auf unterschiedliche Weise.

Frage 1: Global variables are not extern nor static by default on C and C++.

Frage 2: If you do not specify a storage class (that is, the extern or static keywords), then by default global variables have external linkage

Ich muss Folgendes wissen.

  1. ist, dass globale Variablen standardmäßig extern in der Verknüpfung sind (oder), ist es äquivalent zur Deklaration von Variablen durch Angabe der externen Speicherklasse?

2.is globale Variablen sind standardmäßig im Bereich statisch (oder) es entspricht der Deklaration von Variablen durch Angabe der statischen Speicherklasse?

3.Wenn es irgendwelche c oder c ++ Unterschiede gibt, bitte klar?

    
VINOTH ENERGETIC 19.02.2015, 15:52
quelle

2 Antworten

7
  

ist globale Variablen sind extern standardmäßig in der Verknüpfung (oder) es entspricht der Deklaration von Variablen durch Angabe von extern Speicherklasse?

Die Standardspeicherdauer, der Umfang und die Verknüpfung von Variablen, die außerhalb eines Blocks auf der äußersten Ebene deklariert sind, haben static Speicherdauer, Datei Bereich und external Verknüpfung. C11 Standard besagt, dass:

6.2.1 Gültigkeitsbereiche von Identifikatoren (p4):

  

[...] Wenn der Deklarator oder Typbezeichner, der den Bezeichner deklariert, außerhalb eines Blocks oder einer Liste von Parametern angezeigt wird, hat der Bezeichner Dateibereich , der endet am Ende der Übersetzungseinheit. [...]

6.2.2 Verknüpfungen von Bezeichnern (p5):

  

[...] Wenn die Deklaration eines Bezeichners für ein Objekt den Dateibereich und keinen Speicherklassenspezifizierer hat, lautet seine Verknüpfung external .

6.2.4 Speicherdauern von Objekten (p3):

  

Ein Objekt, dessen Bezeichner ohne den Speicherklassenspezifizierer deklariert ist    _Thread_local und entweder mit externer oder interner Verknüpfung oder mit dem Speicherklassenbezeichner static , hat statische Speicherdauer .

Also, wenn x global ist

%Vor%

dann entspricht die Speicherdauer, der Umfang und die Verknüpfung x in

%Vor%
  

ist globale Variablen sind static standardmäßig im Bereich (oder) es entspricht der Deklaration von Variablen durch Angabe von static Speicherklasse?

Nein. Wie ich oben erwähnt habe, ist seine Dauer static und es hat Datei Geltungsbereich.

  

Wenn es irgendeinen Unterschied zwischen c oder c ++ gibt, bitte klar?

Kein Unterschied. Die Regel ist in beiden Sprachen gleich.

    
haccks 19.02.2015 15:59
quelle
3
  

ist global Variablen sind standardmäßig extern in Verbindung (oder) es ist gleichbedeutend mit Variablen durch Angabe externer Speicherklasse deklarieren?

Sofern nicht anders angegeben, haben sie eine externe Verknüpfung (außer in C ++, wo sie interne Verknüpfungen haben, wenn sie konstant sind).

Die erste Antwort, auf die Sie verlinken, besagt, dass es nicht gleichbedeutend ist, es als extern zu deklarieren (was es zu einer reinen Deklaration und nicht zu einer Definition macht); nicht, dass es keine externe Verbindung hat.

  

ist, dass globale Variablen standardmäßig im Bereich statisch sind (oder), dass sie der Variablen durch Angabe der statischen Speicherklasse deklarieren?

In C ++ haben sie eine interne Verknüpfung (wie bei static deklariert), wenn sie konstant sind, andernfalls eine externe Verknüpfung. In C haben sie immer eine externe Verbindung.

  

Wenn es irgendeine c oder c ++ Differenz gibt, bitte klar?

Wie oben erwähnt, ist die Voreinstellung immer die externe Verknüpfung in C, während sie in C ++ für konstante Variablen intern ist.

    
Mike Seymour 19.02.2015 16:25
quelle

Tags und Links