void foo() {
static int x;
}
void bar() {
static int x;
}
int main() {
foo();
bar();
}
Répondre
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.
@FredOverflow: Merci d'avoir attrapé que ... –
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
@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 ... –
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.
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.
Les deux vars statiques sont différents.
Rien arriver, les deux variables ont une portée theri et mantenir leurs valeurs à appeler dans l'appel
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
.
Étant donné ce code? Rien. –
Ils ne déclarent pas la même variable. Deux fonctions différentes ne peuvent jamais déclarer la même variable locale statique. –