En C ++, ce qui se passe si deux fonctions différentes déclarent la même variable statique?

StackOverflow https://stackoverflow.com/questions/4108147

Question

void foo() {
    static int x;
}

void bar() {
    static int x;
}

int main() {
    foo();
    bar();
}
Était-ce utile?

La solution

Chacun ne voit que leur propre un. Une variable ne peut pas être « vu » de l'extérieur champ qu'il est déclaré dans.

Si, d'autre part, vous avez fait ceci:

static int x;

void foo() {
    static int x;
}

int main() {
    foo();
}

alors foo() ne voit son x local; la x mondiale a été « cachée » par elle. Mais les changements à un ne touchent pas la valeur de l'autre.

Autres conseils

Les variables sont distinctes, chaque fonction a sa propre portée. Ainsi, bien que les deux dernières variables pour toute la durée du processus, ils ne gênent pas les uns avec les autres.

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, à savoir qu'il est de la responsabilité de votre compilateur pour faire en sorte que ceux-ci ne se heurtent pas.

rien ne se passe, les deux variables ont leur champ d'application et de maintenir leurs valeurs à appeler dans l'appel

Les deux vars statiques sont différents.

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 pas faire ce que votre code sera difficile à lire et à maintenir après un certain temps que vous ne serez pas en mesure d'attraper à la fois de ce que x vous parlez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top