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?
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?
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"
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
@ Leichtigkeit-Rennen-in-Orbit: Ich wollte sagen "nur erklärt". aber danke das macht Sinn. – sjsam
@display_error: Es gibt keine "externe Variable", und die anderen Antworten sagen das. –
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.
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 specifierstatic
, 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.
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
Lebensdauer des Programms. Wird einmalig beim Laden oder Programmstart initialisiert. Der Standardwert ist 0. Der Initialwert kann nicht innerhalb des Blocks initialisiert werden.
Die Lebensdauer ist wie statisch. – i486
@ i486: Bitte antworten Sie nicht im Kommentarbereich. –
@LightnessRacesinOrbit Antworten Abschnitt erfordert mehr Wörter :) – i486