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

void bar() { 
    static int x; 
} 

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

Étant donné ce code? Rien. –

+0

Ils ne déclarent pas la même variable. Deux fonctions différentes ne peuvent jamais déclarer la même variable locale statique. –

Répondre

20

Ils ne voient chacun que leur propre. Une variable ne peut pas être « vu » de l'extérieur du scope qu'il a déclaré dans

Si, d'autre part, vous avez fait cela.

static int x; 

void foo() { 
    static int x; 
} 

int main() { 
    foo(); 
} 

alors foo() ne voit son x local; le global x a été "caché" par lui. Mais les changements à l'un n'affectent pas la valeur de l'autre.

+0

@FredOverflow: Merci d'avoir attrapé que ... –

+0

sont namespaces anonymes considérés comme un meilleur style que les globals statiques en C++? Les deux utilisations de "static int x;" (un mondial, un local) semble compliquer la question. – Flexo

+3

@awoodlannd: l'utilisation de 'static' à cette fin est déconseillée en C++ (D.2/1). Que ce soit le meilleur style dépend si la personne que vous posez est d'accord avec cette dépréciation ... –

3

Ceci est parfaitement bien. En pratique, le nom réel de la variable dans la sortie du compilateur peut être considéré comme quelque chose comme function_bar_x, c'est-à-dire qu'il est de la responsabilité de votre compilateur de s'assurer que ceux-ci ne sont pas incompatibles.

6

Les variables sont distinctes, chaque fonction a sa propre portée. Ainsi, bien que les deux variables durent toute la vie du processus, elles n'interfèrent pas les unes avec les autres.

1

Les deux vars statiques sont différents.

2

Rien arriver, les deux variables ont une portée theri et mantenir leurs valeurs à appeler dans l'appel

0

Le compilator se traduit chaque variable d'une manière unique, comme foo_x et bar_x dans votre exemple, ils sont taraudés différemment. Ne faites pas cela car votre code sera difficile à lire et à maintenir après un certain temps puisque vous ne serez pas en mesure d'attraper immédiatement ce dont vous parlez x.

Questions connexes