extern int p;
Cで変数 "extern"の有効期間はありますか?
が、それは、静的、動的、自動またはnoリンケージがないので、それが何の寿命を持っていないと宣言されている場合、変数p
の寿命は何ですか? extern
宣言によって導入された名前の寿命について話す
extern int p;
Cで変数 "extern"の有効期間はありますか?
が、それは、静的、動的、自動またはnoリンケージがないので、それが何の寿命を持っていないと宣言されている場合、変数p
の寿命は何ですか? extern
宣言によって導入された名前の寿命について話す
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
は
変数の有効期間は、コード内のどこで発生するかによって異なります。変数がある関数内で宣言されていれば、それは自動的な存続時間を持つことを意味します。他の人からの回答は、extern変数に静的な存続時間があることを示唆しています。だから、それは静的な寿命だけである必要はありませんか? – user300046
@ lightness-race-in-orbit:私は「宣言のみ」と言っていた。しかし、これは感謝しています。 – sjsam
@display_error:「extern変数」のようなものはありません。他の答えはそれを言います。 –
はあまり意味がありません - 保存期間はオブジェクトのではなく、名の財産です。
一方、可変宣言は、静的記憶期間を持つグローバル変数のみを参照できます。
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 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.
ニース。副題として、キーワード 'static'は、' block scope'で使用される場合を除いてリンケージのためにのみ意味されます。 – sjsam
プログラマーの生涯。ロード時またはプログラムの起動時に1回初期化されます。デフォルトの初期値は0です。ブロック内で初期化することはできません。
寿命は静的に似ています。 – i486
@ i486:コメント欄にお答えください。 –
@LightnessRacesinOrbit回答セクションにはさらに多くの単語が必要です:) – i486