Barninga Z
a- a+

Le variabili C automatic

L'ACCESSIBILITÀ' E LA DURATA DELLEVARIABILI

Le variabili automatic 

Qualsiasi variabile dichiarata all'interno di un bloccodi codice racchiuso tra parentesi graffe (generalmenteall'inizio di una funzione) appartiene per default allaclasse automatic. Non è dunque necessario,anche se è possibile farlo, utilizzare la parolachiave auto. La durata e la visibilità dellavariabile sono entrambe limitate al blocco di codice in cuiessa è dichiarata. Se una variabile èdichiarata in testa ad una funzione, essa esiste (cioèoccupa memoria) dal momento in cui la funzione inizia adessere eseguita, sino al momento in cui la sua esecuzionetermina. 

Le variabili automatic, dunque, non occupano spazio dimemoria se non quando effettivamente servono; inoltre,essendo accessibili esclusivamente dall'interno di quellafunzione, non vi è il rischio che possano esseremodificate accidentalmente da operazioni svolte in funzionidiverse su variabili aventi medesimo nome: in un programma C,infatti, più variabili automatic possono avere lostesso nome, purché dichiarate in blocchi di codicediversi. Se i blocchi sono nidificati (cioè unoè interamente all'interno di un altro) ciòè ancora vero, ma la variabile dichiarata nel bloccointerno "nasconde" quella dichiarata con identiconome nel blocco esterno (quando, ovviamente, viene eseguitoil blocco interno). 

Vediamo un esempio: 

#includevoid main(void){    int x = 1;    int y = 10;    {  int x = 2;  printf("%d, %d" ,x,y);    }    printf("%d, %d" ,x,y);}

 

La variabile x dichiarata in testa alla funzionemain() è inizializzata a 1, mentrela x dichiarata nel blocco interno èinizializzata a 2. L'output del programmaé: 

2, 10
1, 10

 

Ciò prova che la "prima" x esistein tutta la funzione main(), mentre la"seconda" esiste ed è visibile solo nelblocco più interno; inoltre, dal momento che le duevariabili hanno lo stesso nome, nel blocco interno la primax è resa non visibile dalla seconda. Lay, invece, è visibile anche nel bloccointerno. 

Se si modifica il programma dell'esempio comesegue: 

#includevoid main(void){    int x = 1;    int y = 10;    {  int x = 2;  int z = 20;  printf("%d, %d" ,x,y);    }    printf("%d, %d" ,x,y,z);}

 

il compilatore non porta a termine la compilazione e segnalal'errore con un messaggio analogo a "undefinedsymbol z in function main()" a significare che laseconda printf() non può referenziare lavariabile z, poiche questa cessa di esistere altermine del blocco interno di codice. 

La gestione delle variabili automatic è dinamica. Lamemoria necessaria è allocata alla variabileesclusivamente quando viene eseguito il blocco di codice(tipicamente una funzione) in cui essa è dichiarata, ele viene "sottratta" non appena il blocco termina.Ciò implica che non è possibile conoscere ilcontenuto di una variabile automatic prima che le vengaesplicitamente assegnato un valore da una istruzione facenteparte del blocco: a beneficio dei distratti, vale la pena dievidenziare che una variabile automatica può essereutilizzata in lettura prima di essere inizializzata[23], ma il valore in essa contenuto ècasuale e, pertanto, inutilizzabile nella quasitotalità dei casi. 

E' opportuno sottolineare che mentre le variabilidichiarate nel blocco più esterno di una funzione(cioè in testa alla stessa) esistono e sono visibili(salvo il caso di variabili con lo stesso nome) in tutti iblocchi interni di quella funzione, nel caso di funzionidiverse nessuna di esse può accedere alle variabiliautomatiche delle altre. 

 



Ti potrebbe interessare anche

commenta la notizia