2016-07-11 10 views
2

extern int p;Cで変数 "extern"の有効期間はありますか?

が、それは、静的、動的、自動またはnoリンケージがないので、それが何の寿命を持っていないと宣言されている場合、変数pの寿命は何ですか? extern宣言によって導入された名前の寿命について話す

+4

寿命は静的に似ています。 – i486

+0

@ i486:コメント欄にお答えください。 –

+1

@LightnessRacesinOrbit回答セクションにはさらに多くの単語が必要です:) – i486

答えて

2

or it has no lifetime because there is no linkage?

キーワードexternはそれが全く記憶が[1]のために割り当てられていない場合、変数のみ宣言されることを意味します。

キーワードexternは、変数の有効期間とは関係ありません。つまり、変数の存続時間/有効範囲は、コード内で正確にどこに発生するかによって決まります。

extern

extern int i=5; 

キーワードexternような割り当てに使用されている[1] [2]は無視され、通常のスコープ規則は可変

に適用されますこれについて私の他の[ answer ]を確認してください。


Interesing:ステファン・プラータは彼の本の中でC++入門Plusはそれを置くとして、キーワードextern

+0

変数の有効期間は、コード内のどこで発生するかによって異なります。変数がある関数内で宣言されていれば、それは自動的な存続時間を持つことを意味します。他の人からの回答は、extern変数に静的な存続時間があることを示唆しています。だから、それは静的な寿命だけである必要はありませんか? – user300046

+0

@ lightness-race-in-orbit:私は「宣言のみ」と言っていた。しかし、これは感謝しています。 – sjsam

+1

@display_error:「extern変数」のようなものはありません。他の答えはそれを言います。 –

8

はあまり意味がありません - 保存期間はオブジェクトのではなく、の財産です。

一方、可変宣言は、静的記憶期間を持つグローバル変数のみを参照できます。

1

C11ドラフトセクション6.2.4 "この名前の前に外部で定義されたことにより、変数を使用する" という意味

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

ニース。副題として、キーワード 'static'は、' block scope'で使用される場合を除いてリンケージのためにのみ意味されます。 – sjsam

1

プログラマーの生涯。ロード時またはプログラムの起動時に1回初期化されます。デフォルトの初期値は0です。ブロック内で初期化することはできません。

関連する問題