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()只看到它的本地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

什么都没有发生,两个变量都有范围并保持它们的值以调用调用

于 2010-11-05T16:59:52.143 回答
1

这两个静态变量是不同的。

于 2010-11-05T16:59:32.460 回答
0

编译器以独特的方式翻译每个变量,例如foo_xbar_x您的示例中,因此它们受到不同的威胁。

不要这样做,因为您的代码在一段时间后将难以阅读和维护,因为您将无法立即了解x您所指的内容。

于 2015-02-20T13:33:40.493 回答