Что происходит в C ++, если две разные функции объявляют одну и ту же статическую переменную? - PullRequest
7 голосов
/ 05 ноября 2010
void foo() {
    static int x;
}

void bar() {
    static int x;
}

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

Ответы [ 6 ]

20 голосов
/ 05 ноября 2010

Каждый из них видит только своего. Переменная не может быть «видна» снаружи scope , в котором она объявлена.

Если, с другой стороны, вы сделали это:

static int x;

void foo() {
    static int x;
}

int main() {
    foo();
}

тогда foo() видит только свой локальный x; глобальное x было «скрыто» им. Но изменения одного не влияют на ценность другого.

6 голосов
/ 05 ноября 2010

Переменные различны, каждая функция имеет свою область видимости.Таким образом, хотя обе переменные сохраняются в течение всего жизненного цикла процесса, они не мешают друг другу.

3 голосов
/ 05 ноября 2010

Это прекрасно.На практике фактическое имя переменной в выходных данных компилятора может восприниматься как что-то вроде function_bar_x, т. Е. Ваш компилятор несет ответственность за то, чтобы они не конфликтовали.

2 голосов
/ 05 ноября 2010

Ничего не происходит, обе переменные имеют свою область видимости и поддерживают свои значения для вызова в вызове

1 голос
/ 05 ноября 2010

Два статических переменных различны.

0 голосов
/ 20 февраля 2015

Компилятор переводит каждую переменную уникальным образом, например, foo_x и bar_x в вашем примере, поэтому они обрабатываются по-разному.

Не делайте этого, поскольку ваш код будет трудно читать и поддерживать через некоторое время, так как вы не сможете сразу понять, на что x вы ссылаетесь.

...