Pregunta

void foo() {
    static int x;
}

void bar() {
    static int x;
}

int main() {
    foo();
    bar();
}
¿Fue útil?

Solución

Cada uno de ellos ver sólo su propio. Una variable no puede ser "visto" desde fuera del href="http://en.wikipedia.org/wiki/Scope_(programming)" rel="noreferrer"> alcance

Si, por el contrario, se hizo esto:

static int x;

void foo() {
    static int x;
}

int main() {
    foo();
}

A continuación, foo() sólo ve su x local; la x mundial se ha "escondido" por ella. Pero los cambios en una no afectan al valor de la otra.

Otros consejos

Las variables son distintas, cada función tiene su propio ámbito de aplicación. Así que, aunque ambas variables tienen una duración de la vida útil del proceso, que no interfieren entre sí.

Esto es perfectamente normal. En la práctica, el nombre real de la variable en la salida del compilador puede ser pensado como algo así como function_bar_x, es decir, es la responsabilidad de su compilador para asegurarse de que éstos se encuentren.

Nada sucede, ambas variables tienen su alcance y mantienen sus valores a llamar en la llamada

Los dos vars estáticos son diferentes.

El compilador traduce cada variable de una manera única, como foo_x y bar_x en su ejemplo, por lo que están roscadas de manera diferente.

No haga esto como su código será más difícil de leer y mantener después de algún tiempo ya que no será capaz de atrapar a la vez de lo x te refieres.

scroll top