31.05.2013 Views

Tricky C - Si® @lbert Site

Tricky C - Si® @lbert Site

Tricky C - Si® @lbert Site

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

34 - <strong>Tricky</strong> C<br />

L ' A C C E S S I B I L I T À E L A D U R A T A D E L L E V A R I A B I L I<br />

In C le variabili possono essere classificate, oltre che secondo il tipo di dato, in base alla loro<br />

accessibilità e alla loro durata. In particolare, a seconda del contesto in cui sono dichiarate, le variabili di<br />

un programma C assumono per default determinate caratteristiche di accessibilità e durata; in molti casi,<br />

però, queste possono essere modificate mediante l'utilizzo di apposite parole chiave applicabili alla<br />

dichiarazione delle variabili stesse.<br />

Per comprendere i concetti di accessibilità (o visibilità) e durata, va ricordato che una variabile<br />

altro non è che un'area di memoria, grande quanto basta per contenere un dato del tipo indicato nella<br />

dichiarazione, alla quale il compilatore associa, per comodità del programmatore, il nome simbolico da<br />

questi scelto.<br />

In termini generali, possiamo dire che la durata di una variabile si estende dal momento in cui le<br />

viene effettivamente assegnata un'area di memoria fino a quello in cui quell'area è riutilizzata per altri<br />

scopi.<br />

Dal punto di vista dell'accessibilità ha invece rilevanza se sia o no possibile leggere o<br />

modificare, da parti del programma diverse da quella in cui la variabile è stata dichiarata, il contenuto<br />

dell'area di RAM riservata alla variabile stessa<br />

Cerchiamo di mettere un po' d'ordine...<br />

L e v a r i a b i l i a u t o m a t i c<br />

Qualsiasi variabile dichiarata all'interno di un blocco di codice racchiuso tra parentesi graffe<br />

(generalmente all'inizio di una funzione) appartiene per default alla classe automatic. Non è dunque<br />

necessario, anche se è possibile farlo, utilizzare la parola chiave auto. La durata e la visibilità della<br />

variabile sono entrambe limitate al blocco di codice in cui essa è dichiarata. Se una variabile è dichiarata<br />

in testa ad una funzione, essa esiste (cioè occupa memoria) dal momento in cui la funzione inizia ad<br />

essere eseguita, sino al momento in cui la sua esecuzione termina.<br />

Le variabili automatic, dunque, non occupano spazio di memoria se non quando effettivamente<br />

servono; inoltre, essendo accessibili esclusivamente dall'interno di quella funzione, non vi è il rischio che<br />

possano essere modificate accidentalmente da operazioni svolte in funzioni diverse su variabili aventi<br />

medesimo nome: in un programma C, infatti, più variabili automatic possono avere lo stesso nome,<br />

purché dichiarate in blocchi di codice diversi. Se i blocchi sono nidificati (cioè uno è interamente<br />

all'interno di un altro) ciò è ancora vero, ma la variabile dichiarata nel blocco interno "nasconde" quella<br />

dichiarata con identico nome nel blocco esterno (quando, ovviamente, viene eseguito il blocco interno).<br />

Vediamo un esempio:<br />

#include <br />

void main(void)<br />

{<br />

int x = 1;<br />

int y = 10;<br />

{<br />

int x = 2;<br />

}<br />

printf("%d, %d\n",x,y);<br />

}<br />

printf("%d, %d\n",x,y);<br />

La variabile x dichiarata in testa alla funzione main() è inizializzata a 1, mentre la x<br />

dichiarata nel blocco interno è inizializzata a 2. L'output del programma é:

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!