重複の可能性:
Cの変数のスコープと寿命
cの変数のスコープと有効期間の違いは何ですか? 関数内のブロック内で宣言された変数のスコープと有効期間は何ですか?
2 つの関数があるとします。
void foo()
{
/* Do some stuff */
}
void bar()
{
int local_bar;
foo();
/* Do some more stuff */
}
関数bar
内では、変数のスコープlocal_bar
はすべて関数内にありますbar
。foo
変数を呼び出すと、一時的にスコープ外になります。つまり、 の内部からは使用できませんfoo
。ただし、変数の有効期間は終了していません。関数bar
が終了したときにのみ終了します。
場合によります。スコープは変数にアクセスできるコードのブロックを表し、ライフタイムは作成から破棄までの期間を表します。
関数内のブロック内で宣言された変数のスコープと有効期間は何ですか?
この場合、それらは一致します。
{
int x; // begin scope and lifetime
} // end scope and lifetime
違いは、たとえばグローバルなど、他の場合に発生します。を宣言し、extern int x
どこかで定義します。その有効期間はプログラムの開始から終了まで延長されますが、その範囲は実際に宣言を含めるファイル内のみです。