void foo() {
static int x;
}
void bar() {
static int x;
}
int main() {
foo();
bar();
}
答案 0 :(得分:20)
他们每个人只看到自己的一个。变量不能从它声明的scope之外“看到”。
另一方面,如果你这样做了:
static int x;
void foo() {
static int x;
}
int main() {
foo();
}
然后foo()
只能看到其本地x
;全球x
已被其“隐藏”。但改变一个不会影响另一个的价值。
答案 1 :(得分:6)
变量是不同的,每个函数都有自己的范围。因此,尽管两个变量都持续了整个过程的生命周期,但它们并没有相互干扰。
答案 2 :(得分:3)
这很好。实际上,编译器输出中变量的实际名称可以被认为是类似function_bar_x
的东西,即编译器有责任确保它们不会发生冲突。
答案 3 :(得分:2)
没有任何事情发生,两个变量都有其范围并保持其值以在呼叫中调用
答案 4 :(得分:1)
两个静态变量不同。
答案 5 :(得分:0)
编译器以独特的方式翻译每个变量,例如示例中的foo_x
和bar_x
,因此它们的威胁方式不同。
不要这样做,因为您的代码在一段时间后难以阅读和维护,因为您无法立即了解您所指的x
。