INTRODUZIONE ALLA PROGRAMMAZIONE IN C



Unioni



Un'unione e' una variabile che puo' tenere (in momenti diversi) oggetti di diversa dimensione e tipo. Il C usa l'istruzione "union" per creare unioni; ad esempio: union number { short shortnumber; long longnumber; double doublenumber; } anumber In questo modo viene definita un'unione chiamata number e un riferimento ad essa chiamato anumber. "number" e' un'etichetta (tag) di unione e funziona alla stessa maniera del tag delle strutture. Si accede ai membri dell'unione come per i membri delle strutture. Ad esempio: printf("%ld\n",anumber.longnumber); Questa istruzione visualizza semplicemente il valore di longnumber. Quando il compilatore C alloca la memoria per le unioni, riserva sempre lo spazio necessario per il membro piu' grande (nell'esempio sopra riportato, sono 8 bytes per il tipo "double"). Per fare si che il programma possa tenere traccia del tipo della variabile di unione usata in un determinato momento, e' diffusa l'abitudine di avere una struttura (con registrate le unioni) e una variabile che indica il tipo dell'unione. Ad esempio: typedef struct {int maxpassengers; } jet; typedef struct {int liftcapacity; } helicopter; typedef struct {int maxpayload; } cargoplane; typedef struct {jet jetu; helicopter helicopteru; cargoplane cargoplaneu; } aircraft; typedef struct {aircrafttype kind; int speed; aircraft description; } an_aircraft; Questo esempio definisce una unione di base aircraft, che puo' essere sia jet, helicopter o cargoplane. Nella struttura an_aircraft c'e' un tipo di elemento che indica quale struttura e' contenuta in quel momento.