Barninga Z
a- a+

Le variabili C automatic

L'ACCESSIBILITÀ' E LA DURATA DELLE VARIABILI

Le variabili automatic 

Qualsiasi variabile dichiarata all'interno di un blocco di codice racchiuso tra parentesi graffe (generalmente all'inizio di una funzione) appartiene per default alla classe automatic. Non è dunque necessario, anche se è possibile farlo, utilizzare la parola chiave auto. La durata e la visibilità della variabile sono entrambe limitate al blocco di codice in cui essa è dichiarata. Se una variabile è dichiarata in testa ad una funzione, essa esiste (cioè occupa memoria) dal momento in cui la funzione inizia ad essere eseguita, sino al momento in cui la sua esecuzione termina. 

Le variabili automatic, dunque, non occupano spazio di memoria se non quando effettivamente servono; inoltre, essendo accessibili esclusivamente dall'interno di quella funzione, non vi è il rischio che possano essere modificate accidentalmente da operazioni svolte in funzioni diverse su variabili aventi medesimo nome: in un programma C, infatti, più variabili automatic possono avere lo stesso nome, purché dichiarate in blocchi di codice diversi. Se i blocchi sono nidificati (cioè uno è interamente all'interno di un altro) ciò è ancora vero, ma la variabile dichiarata nel blocco interno "nasconde" quella dichiarata con identico nome nel blocco esterno (quando, ovviamente, viene eseguito il blocco interno). 

Vediamo un esempio: 

#include

void 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 funzione main() è inizializzata a 1, mentre la x dichiarata nel blocco interno è inizializzata a 2. L'output del programma é: 

2, 10
1, 10

 

Ciò prova che la "prima" x esiste in tutta la funzione main(), mentre la "seconda" esiste ed è visibile solo nel blocco più interno; inoltre, dal momento che le due variabili hanno lo stesso nome, nel blocco interno la prima x è resa non visibile dalla seconda. La y, invece, è visibile anche nel blocco interno. 

Se si modifica il programma dell'esempio come segue: 

#include

void 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 segnala l'errore con un messaggio analogo a "undefined symbol z in function main()" a significare che la seconda printf() non può referenziare la variabile z, poiche questa cessa di esistere al termine del blocco interno di codice. 

La gestione delle variabili automatic è dinamica. La memoria necessaria è allocata alla variabile esclusivamente quando viene eseguito il blocco di codice (tipicamente una funzione) in cui essa è dichiarata, e le viene "sottratta" non appena il blocco termina. Ciò implica che non è possibile conoscere il contenuto di una variabile automatic prima che le venga esplicitamente assegnato un valore da una istruzione facente parte del blocco: a beneficio dei distratti, vale la pena di evidenziare che una variabile automatica può essere utilizzata in lettura prima di essere  inizializzata[23], ma il valore in essa contenuto è casuale e, pertanto, inutilizzabile nella quasi totalità dei casi. 

E' opportuno sottolineare che mentre le variabili dichiarate 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 i blocchi interni di quella funzione, nel caso di funzioni diverse nessuna di esse può accedere alle variabili automatiche delle altre. 

 



Ti potrebbe interessare anche

commenta la notizia

C'è 1 commento
Sara
Hai dubbi su questo articolo?