void foo() {
    static int x;
}

void bar() {
    static int x;
}

int main() {
    foo();
    bar();
}
有帮助吗?

解决方案

他们每个人只看到自己的一个。不能从外部“看到”变量 范围 它被声明了。

另一方面,如果您这样做:

static int x;

void foo() {
    static int x;
}

int main() {
    foo();
}

然后 foo() 只看到它的本地 x;全球 x 它被它“隐藏”了。但是一个变化不会影响另一个的价值。

其他提示

变量是不同的,每个函数都有自己的范围。因此,尽管两个变量在过程的寿命中持续使用,但它们不会彼此干扰。

这很好。实际上,可以将编译器输出中变量的实际名称视为类似 function_bar_x, ,即确保这些不冲突是您的编译器的责任。

什么都没有发生,两个变量都有其范围和Mantain的价值

两个静态VAR是不同的。

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

不要这样做,因为您的代码在一段时间后很难读取和维护,因为您将无法一次捕获什么 x 你指的是吗?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top