2010-11-05 8 views
7
void foo() { 
    static int x; 
} 

void bar() { 
    static int x; 
} 

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

¿Dado ese código? Nada. –

+0

No declaran la misma variable. Dos funciones diferentes nunca pueden declarar la misma variable local estática. –

Respuesta

20

Cada uno ve solo el suyo. Una variable no puede ser "visto" desde fuera del scope que está declarada en

Si, por el contrario, hizo esto:.

static int x; 

void foo() { 
    static int x; 
} 

int main() { 
    foo(); 
} 

continuación foo() sólo ve su local de x; el global x ha sido "ocultado" por él. Pero los cambios en uno no afectan el valor del otro.

+0

@FredOverflow: gracias por capturar ... –

+0

¿hay espacios de nombres anónimos considerados de mejor estilo que los globales estáticos en C++? Los dos usos de "static int x;" (uno global, un local) parece complicar la pregunta. – Flexo

+3

@awoodlannd: el uso de 'static 'para este propósito está obsoleto en C++ (D.2/1). Si es un mejor estilo depende de si la persona a quien le preguntas está de acuerdo con esa desaprobación ... –

3

Esto está perfectamente bien. En la práctica, el nombre real de la variable en la salida del compilador se puede considerar como algo similar a function_bar_x, es decir, es responsabilidad del compilador asegurarse de que estos no entren en conflicto.

6

Las variables son distintas, cada función tiene su propio alcance. Entonces, aunque ambas variables duran la vida del proceso, no interfieren entre sí.

1

Los dos vars estáticos son diferentes.

2

Nada sucederá, ambas variables tienen el alcance y Theri MANTENER sus valores a llamar en la llamada

0

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, ya que su código será difícil de leer y mantener después de un tiempo ya que no podrá ver de inmediato a qué se refiere el x.

Cuestiones relacionadas