void foo() {
static int x;
}
void bar() {
static int x;
}
int main() {
foo();
bar();
}
问问题
2127 次
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_x
在bar_x
您的示例中,因此它们受到不同的威胁。
不要这样做,因为您的代码在一段时间后将难以阅读和维护,因为您将无法立即了解x
您所指的内容。
于 2015-02-20T13:33:40.493 回答