martedì 8 luglio 2014

Variabili statiche in C++

Esercitiamoci con le variabili statiche in C++...

Ecco: una volta che ho inizializzato una variabile, questa rimane statica e non si può inizializzare un'altra volta.
Perché, forse in genere le variabili si possono inizializzare più volte?
Vediamo...

#include "iostream"
using namespace std;


void main(){
 for(int n=0;n<4;n++){
  int variabile=0;
  variabile++;
 }
 
}
Questo codice non dà alcun messaggio di errore: mi è sembrato strano dal momento che una variabile viene dichiarata più volte nell'ambito di un loop.
Ecco la risposta: http://bytes.com/topic/c/answers/727941-redefinition-inside-loop

Ossia la variabile, dichiarata a ogni ciclo, cessa il suo scope con il terminare del singolo ciclo.
Infatti una volta terminato il loop il nome della variabile non viene riconosciuto e questo codice dà errore:
#include "iostream"
using namespace std;


void main(){
 for(int n=0;n<4;n++){
  int variabile=0;
  variabile++;
 }
 cout << variabile;
}

1>------ Inizio compilazione: Progetto: test1, Configurazione: Debug Win32 ------
1>  foglio.cpp
1>c:\users\antonello\documents\visual studio 2010\projects\test1\test1\foglio.cpp(10): error C2065: 'variabile': identificatore non dichiarato
========== Compilazione: 0 completate, 1 non riuscite, 0 aggiornate, 0 ignorate ==========

Per ovviare, dichiaro una variabile prima:
#include "iostream"
using namespace std;

int numero;
void main(){
 for(int n=0;n<4;n++){
  int variabile=0;
  variabile++;
  numero=variabile;
 }
 cout << numero;
        getchar();
}
questo codice non mi dà errore.
E vediamone l'output:
1

Adesso faccio il colpo da maestro, e dichiaro static questa variabile:
#include "iostream"
using namespace std;

int numero;
void main(){
 for(int n=0;n<4;n++){
  static int variabile=0;
  variabile++;
  numero=variabile;
 }
 cout << numero;
 getchar();
}
4

Ecco! A ogni ciclo la variabile viene reinizializzata riprendendo però l'ultimo valore che aveva.
Continua a non essere presente al di fuori del suo scope del singolo ciclo, infatti questo codice mi dà sempre errore di identificatore non dichiarato.
#include "iostream"
using namespace std;

int numero;
void main(){
 for(int n=0;n<4;n++){
  static int variabile=0;
  variabile++;
  numero=variabile;
 }
 cout << variabile;
 getchar();
}
1>------ Inizio compilazione: Progetto: test1, Configurazione: Debug Win32 ------
1>  foglio.cpp
1>c:\users\antonello\documents\visual studio 2010\projects\test1\test1\foglio.cpp(11): error C2065: 'variabile': identificatore non dichiarato
========== Compilazione: 0 completate, 1 non riuscite, 0 aggiornate, 0 ignorate ==========

Nessun commento:

Posta un commento