Domanda

void foo() {
    static int x;
}

void bar() {
    static int x;
}

int main() {
    foo();
    bar();
}
È stato utile?

Soluzione

Ognuno vede solo il proprio uno. Una variabile non può essere "visto" da fuori portata che è dichiarata in.

Se, d'altra parte, è fatto in questo modo:

static int x;

void foo() {
    static int x;
}

int main() {
    foo();
}

poi vede solo la sua foo() x locale; il x globale è stato "nascosto" da essa. Ma i cambiamenti ad una non influenzano il valore degli altri.

Altri suggerimenti

Le variabili sono distinte, ogni funzione ha il proprio ambito. Quindi, anche se entrambe le variabili ultimi per la durata del processo, non interferiscono con l'altro.

Questo è perfettamente bene. In pratica, il nome effettivo della variabile nell'output del compilatore può essere pensato come qualcosa di simile function_bar_x, vale a dire è responsabilità del compilatore per garantire che questi non si scontrano.

Non succede niente, entrambe le variabili hanno la loro portata e mantenere i loro valori di chiamata in chiamata

I due Vars statici sono diversi.

Il compilator traduce ogni variabile in un modo unico, come ad esempio foo_x e bar_x nel tuo esempio, in modo che sono filettate in modo diverso.

Non fare questo il tuo codice sarà difficile da leggere e da gestire dopo qualche tempo dal momento che non sarà in grado di catturare in una sola volta di quello x ti riferisci.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top