Dalla A alla Z passando per C - Robotica
Dalla A alla Z passando per C - Robotica
Dalla A alla Z passando per C - Robotica
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
....<br />
}<br />
}<br />
Non è possibile ottenere l’indirizzo di una variabile register, il compilatore <strong>per</strong>ciò segnalerà un<br />
errore nell’esempio seguente:<br />
register int i;<br />
scanf("%d", &i);<br />
NOTA La direttiva register è da considerare obsoleta, in quanto il compilatore<br />
è in grado di determinare automaticamente se una variabile è bene che sia<br />
memorizzata in un registro o meno.<br />
10.6 Variabili static<br />
La parola chiave static è un qualificatore <strong>per</strong> codice e dati, che serve <strong>per</strong> cambiare le regole di<br />
visibilità.<br />
Un simbolo globale, sia esso una funzione o una variabile, se dichiarato static non è visibile<br />
all’esterno del file ove è definito, <strong>per</strong>ché il suo nome non viene reso disponibile al linker. Una<br />
variabile locale, se static, viene allocata nello spazio dati globale, ma senza esportarne il nome;<br />
<strong>per</strong>mette quindi di avere uno stato <strong>per</strong>sistente tra le varie invocazioni del blocco in cui è definita.<br />
Per esempio:<br />
int i; /* globale */<br />
static int j; /* globale, ma visibile solo in questo file */<br />
static int invert(int i) /* invert può essere chiamata solo in questo file */<br />
{<br />
int j; /* allocata sullo stack */<br />
j = -i; /* variabili locali, "i" è l’argomento della funzione */<br />
return j;<br />
}<br />
int count(void) /* count è definita globalmente nel programma */<br />
{<br />
static int i; /* locale ma <strong>per</strong>sistente, inizializzata a zero */<br />
return ++i; /* incrementa il contatore e ritorna il valore */<br />
}<br />
Il programma precedente dimostra una serie di dichiarazioni di variabili statiche/dinamiche,<br />
locali/globali. L’esempio è abbondantemente commentato.<br />
Appartengono quindi <strong>alla</strong> classe static questa classe variabili locali ad un blocco, allocate<br />
<strong>per</strong>ò staticamente. A differenza delle variabili auto, il valore delle variabili static si conserva da<br />
una chiamata all’altra della stessa funzione. In altri termini il lifetime di una variabile static è<br />
<strong>per</strong>manente. Una variabile static mantiene quindi il suo valore, pur rimanendo invisibile al di<br />
fuori del blocco di definizione.<br />
func()<br />
{<br />
106