7
void foo() {
    static int x;
}

void bar() {
    static int x;
}

int main() {
    foo();
    bar();
}
4

6 に答える 6

20

彼らはそれぞれ自分のものだけを見ています。変数は、宣言されているスコープの外から「見る」ことはできません。

一方、これを行った場合:

static int x;

void foo() {
    static int x;
}

int main() {
    foo();
}

次にfoo()、その local のみが表示されxます。グローバルxはそれによって「隠されています」。ただし、一方を変更しても、他方の値には影響しません。

于 2010-11-05T16:58:57.927 に答える
6

変数は異なり、各関数には独自のスコープがあります。したがって、両方の変数はプロセスの存続期間中持続しますが、互いに干渉することはありません。

于 2010-11-05T16:59:31.937 に答える
3

これはまったく問題ありません。実際には、コンパイラの出力における変数の実際の名前は、 のようなものと考えることができますfunction_bar_x。つまり、これらが衝突しないようにするのはコンパイラの責任です。

于 2010-11-05T16:59:13.263 に答える
2

何も起こりません。両方の変数には ri スコープがあり、呼び出しで呼び出す値を維持します

于 2010-11-05T16:59:52.143 に答える
1

2 つの静的変数は異なります。

于 2010-11-05T16:59:32.460 に答える