2016-07-11 30 views
2

Was die Lebensdauer der Variable p ist, wenn es als extern int p;Lebensdauer von "extern" Variable in C?

erklärt wird, ist es statisch, dynamisch, automatisch oder es keine Lebensdauer hat, weil es keine Bindung ist?

+4

Die Lebensdauer ist wie statisch. – i486

+0

@ i486: Bitte antworten Sie nicht im Kommentarbereich. –

+1

@LightnessRacesinOrbit Antworten Abschnitt erfordert mehr Wörter :) – i486

Antwort

2

or it has no lifetime because there is no linkage?

Das Schlüsselwort extern bedeutet eine Variable deklariert ist nur, dass kein Speicher für sie zugeordnet ist [1].

Das Schlüsselwort extern hat nichts mit der Lebensdauer einer Variablen zu tun. Das heißt, die Lebensdauer/der Gültigkeitsbereich einer Variablen hängt nur davon ab, wo genau sie im Code auftritt.

Hinweis

[1] Wenn extern mit einer Zuordnung wie

extern int i=5; 

verwendet wird, das Schlüsselwort extern ignoriert wird und die üblichen Umfang Regeln gelten für die variable

[2] Bitte überprüfen Sie meine anderen [ answer ] auf diesem.


interesing: Wie Stephen Prata in seinem Buch C++ Primer plus es ausdrückt, das Schlüsselwort extern bedeutet "unter diesem Namen die Variable verwenden zuvor extern definierten"

+0

Sie sagen, dass die Lebensdauer einer Variablen nur davon abhängt, wo genau sie im Code vorkommt. Dann bedeutet das, dass wenn die Variable innerhalb einer Funktion deklariert ist, sie eine automatische Lebensdauer hat. Antworten von anderen deuten darauf hin, dass externe Variablen statische Lebensdauer haben. Also muss es nicht nur statische Lebensdauer sein? – user300046

+0

@ Leichtigkeit-Rennen-in-Orbit: Ich wollte sagen "nur erklärt". aber danke das macht Sinn. – sjsam

+1

@display_error: Es gibt keine "externe Variable", und die anderen Antworten sagen das. –

8

Gespräch über die Lebensdauer des Namens durch die Erklärung nicht extern eingeführt nicht viel Sinn machen - Lagerdauer ist eine Eigenschaft von Objekte, nicht von Namen. Eine extern Variablendeklaration kann sich nur auf eine globale Variable beziehen, die statische Speicherdauer hat.

1

C11 Entwurf Abschnitt 6.2.4 sagt

An object whose identifier is declared without the storage-class specifier _Thread_local , and either with external or internal linkage or with the storage-class specifier static , has static storage duration. Its lifetime is the entire execution of the program and its stored value is initialized only once, prior to program startup.

+1

Schön. Als Randnotiz ist das Schlüsselwort 'static' nur für die Verknüpfung gedacht, außer wenn es in' block scope' verwendet wird. – sjsam

1

Lebensdauer des Programms. Wird einmalig beim Laden oder Programmstart initialisiert. Der Standardwert ist 0. Der Initialwert kann nicht innerhalb des Blocks initialisiert werden.