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.

Boolean in C.


Mentre mi scrivevo un semplice applicativo in C ho incontrato la necessita di utilizzare, più per logica che per vera vitale importanza, variabili di tipo booleane che non sono contemplate tra i tipi di dati di questo linguaggio.

Per chi non lo sapesse le variabili booleane sono i più semplici tipi di dati e possono assumere solo due valori logici, VERO o FALSO che convenzionalmente vengono, rispettivamente, indicati come 1 o 0 logico. Questi tipi di variabile fanno parte di una branca della matematica che prende il nome di Algebra di Bool o Algebra Booleana che consta di proprie funzioni, proprietà e operazioni.

Ci tengo a precisare che una delle caratteristiche del C è che lo zero viene sempre riconosciuto come FALSO mentre ogni altro valore ha validità logica VERA. Questo vuol dire che in modo intrinseco il linguaggio ha già una sua struttura booleana. Tuttavia mi trovavo difronte ad una scelta stilistica che mi avrebbe permesso, viste le mie abitudini con altri linguaggi, di avere sott’occhio un codice a me più famigliare. Il problema è stato risolto in modo davvero facile ed indolore; è bastato ricorrere all’enumerazione e alla definizione di tipo che il C mette a disposizione: ovvero enum e typedef.

Per maggiori informazioni su enum vi rimando a QUESTO post mentre per typedef a QUESTO.

La porzione di codice che ho usato è la seguente:

typedef enum {false, true} boolean;

Si nota come false avrà valore intero 0 mentre true il valore intero immediatamente successivo, ovvero 1.

Con questo sistema ho potuto dichiarare una mia variabile di nome bool inizializzata al valore false, con la sintassi:

boolean bool=false;

e l’ho potuta usare e testare quando necessario senza problemi.

Didattica C: Compilare codice con gtk

Nel precedente post ho postato un semplice codice per imparare a creare interfacce gtk basilari con codice C. Ora vediamo come compilare quanto scritto.

Dopo aver salvato il codice in un file di estensione .c, rechiamoci nel terminale, spostiamoci (mediante il comando cd) nella cartella in cui risiede il file e copiamo il seguente codice:

gcc -Wall -g codice.c -o eseguibile `pkg-config --cflags --libs gtk+-2.0`

Premiamo invio e se tutto va a buon fine il terminale non dovrebbe restituire nulla.
Ricordate di cambiare codice.c con il nome del vostro file e eseguibile con un nome che volete dare all’eseguibile.

Ora è possibile lanciare l’eseguibile con:

./eseguibile

oppure recandoci nella cartella dove esso risiede ed effettuando un doppio click sul file che riporta lo stesso nome.

E’ importante tenere presente che i parametri pkg-config –cflags –libs gtk+-2.0 devono essere racchiusi tra apici inversi. Questo carattere si ottiene dalla combinazione su tastiera AltGr + ‘