0

重複の可能性:
Cの変数のスコープと寿命

cの変数のスコープと有効期間の違いは何ですか? 関数内のブロック内で宣言された変数のスコープと有効期間は何ですか?

4

2 に答える 2

9

2 つの関数があるとします。

void foo()
{
    /* Do some stuff */
}

void bar()
{
    int local_bar;

    foo();

    /* Do some more stuff */
}

関数bar内では、変数のスコープlocal_barはすべて関数内にありますbarfoo変数を呼び出すと、一時的にスコープ外になります。つまり、 の内部からは使用できませんfoo。ただし、変数の有効期間は終了していません。関数barが終了したときにのみ終了します。

于 2012-07-12T08:42:58.217 に答える
1

場合によります。スコープは変数にアクセスできるコードのブロックを表し、ライフタイムは作成から破棄までの期間を表します。

関数内のブロック内で宣言された変数のスコープと有効期間は何ですか?

この場合、それらは一致します。

{
   int x; // begin scope and lifetime
}  // end scope and lifetime

違いは、たとえばグローバルなど、他の場合に発生します。を宣言し、extern int xどこかで定義します。その有効期間はプログラムの開始から終了まで延長されますが、その範囲は実際に宣言を含めるファイル内のみです。

于 2012-07-12T08:38:15.663 に答える