18.08.2013 Views

Dalla A alla Z passando per C - Robotica

Dalla A alla Z passando per C - Robotica

Dalla A alla Z passando per C - Robotica

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

che associa il nome nome al tipo tipo.<br />

Per esempio, in un sistema di calcolo che tiene traccia del trascorrere del tempo in unità<br />

discrete, è possibile effettuare il seguente assegnamento:<br />

typedef unsigned long TIME;<br />

Questo <strong>per</strong>mette, all’interno del programma, di individuare facilmente le variabili che hanno a<br />

che fare col tempo, in quanto sono “dichiarate tipo TIME”, distinguendole da variabili di tipo<br />

unsigned long utilizzati <strong>per</strong> altri scopi.<br />

Il fatto di affermare che le variabili sono “dichiarate di tipo TIME” è un po’ impropria. Infatti,<br />

l’assegnazione del nome TIME al tipo unsigned long non crea un nuovo tipo di dato: dal punto<br />

di vista semantico una variabile dichiarata di tipo unsigned long è <strong>per</strong>fettamente equivalente<br />

ad una di tipo TIME. L’assegnazione di nuovi nomi ai tipi di dato potrebbe essere realizzata in<br />

modo simile utilizzando la direttiva del preprocessore #define, con la differenza che nel caso di<br />

typedef la sostituzione viene fatta dal compilatore e non dal preprocessore, che garantisce la<br />

coerenza di controllo sulla tipizzazione delle varibili.<br />

In altri casi è possibile assegnare un nome sintetico a tipi complessi, in modo da aumentare<br />

la chiarezza del codice. Nell’esempio seguente viene associato il nome t_cerchio <strong>alla</strong> struttura<br />

che contiene i dati <strong>per</strong> rappresentare un cerchio:<br />

typedef struct {<br />

int x,<br />

int y;<br />

int raggio;<br />

} t_cerchio;<br />

in questo modo si possono definire e utilizzare variabili di tipo t_cerchio, <strong>per</strong> esempio definendo<br />

una funzione che controlla se due cerchi sono uguali nel modo seguente:<br />

int equal(t_cerchio c1, t_cerchio c2)<br />

{<br />

return ((c1.x == c2.x) && (c1.y == c2.y) && (c1.raggio == c2.raggio));<br />

}<br />

87

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

Saved successfully!

Ooh no, something went wrong!