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.
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?
ist globale Variablen sind
extern
standardmäßig in der Verknüpfung (oder) es entspricht der Deklaration von Variablen durch Angabe vonextern
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:
[...] 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. [...]
[...] Wenn die Deklaration eines Bezeichners für ein Objekt den Dateibereich und keinen Speicherklassenspezifizierer hat, lautet seine Verknüpfung
external
.
Ein Objekt, dessen Bezeichner ohne den Speicherklassenspezifizierer deklariert ist
_Thread_local
und entweder mit externer oder interner Verknüpfung oder mit dem Speicherklassenbezeichnerstatic
, hat statische Speicherdauer .
Also, wenn x
global ist
dann entspricht die Speicherdauer, der Umfang und die Verknüpfung x
in
ist globale Variablen sind
static
standardmäßig im Bereich (oder) es entspricht der Deklaration von Variablen durch Angabe vonstatic
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.
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.