TRASLOCO
Sempre mosso dalla voglia di allontanarmi da Google e dai suoi servizi, ho finalmente deciso che dopo diversi anni la piattaforma di questo piccolo spazio andava cambiata. Finalmente il blo cambia casa. Se volete trovarmi potete recarvi al nuovo indirizzo

giovedì 18 febbraio 2010

Didattica C: enumerazione

Con l'enumerazione si ha la possibilità di creare gruppi enumerativi ovvero di dare il nome ad un insieme finito di voci associando un nome univoco ad ognuno di essi.

La sintassi di tale funzione è:

enum mio_tipo {voce1, voce2, voce3, ...,vocen};

con la quale si crea il tipo con l'etichetta (o tag) mio_tipo e gli identificatori voce1, voce2, ..., vocen che sono in realtà delle costanti di tipo int. Voce1 (cioè il primo identificatore) ha valore 0 mentre quelli che seguono assumo il valore intero successivo.
Dopo aver creato mio_dato abbiamo bisogno di associare una nuova variabile a questo tipo per sfruttarne le potenzialità. D'ora in avanti, infatti, l'enumerativo mio_tipo potrà essere considerato , su per giù, un tipo di dato proprio come lo sono, ad esempio, char, int o float.

La sua definizione avviene con la seguente sintassi:

enum mio_tipo dato;

mediante la quale dato sarà di tipo mio_tipo.

Ad ogni variabile alla quale si impone un tipo enumerativo, si potranno assegnare solo valori facenti parte del gruppo in questione. Quindi un esempio di dichiarazione in questo caso potrebbe essere

dato = voce3;

oppure

if (dato == voce2) printf("Definizione enumerativa");

L'inizializzazione degli identificatori, come detto, è di default posta a 0. Esso infatti sarà il valore intero associato al primo identificatore del gruppo. Tuttavia questa struttura può essere modifica in maniera del tutto personale. In questo codice di esempio:

enum giorni{lun=1, mar, mer, gio, ven, sab, dom};

gli identificatori sono inizializzati ad 1 e tutti quelli che seguono avranno valore intero successivo crescente.
Questo esempio può anche essere esteso ed è possibile assegnare i valori voluti, ad ogni costante del gruppo o ad alcune di esse, anche se essi non sono in ordine crescente.
Ad esempio

enum giorni{lun=1, mar, mer, gio=5, ven, sab, dom=13};

e

enum giorni{lun=1, mar=9, mer=0, gio=5, ven=4, sab=2, dom=3};

sono entrambi esempi validi che rispettano gli standard e le possibilità e non restituiscono nessun errore.
C'è da specificare che è possibile dichiarare costanti nel gruppo con lo stesso valore intero ma non è possibile ne dichiarare due o più gruppi con lo stesso nome o costanti dello stesso gruppo con lo stesso nome.

Finisco con una piccola curiosità. È possibile dichiarare subito una variabile con un gruppo enumerativo nello stesso momento in qui esso viene creato. Con la sintassi

enum frutta {mele, pere, kiwi} frt;

si crea una variabile frt di tipo frutta.