No, hai scritto un codice senza alcun senso (oltre che senza formattazione, indentazione e senza tag CODE).
I casi di utilizzo sono potenzialmente infiniti. Ma quello che devi capire è cos'è un enumeratore e come si usa, dato che non l'hai chiaramente capito.
Un enumeratore definisce un insieme di costanti con un certo valore, e definisce anche un tipo di dato nuovo. Qualsiasi variabile abbia questo tipo di dato è in realtà un intero (non c'è differenza, in C, tra interi e tipi enum).
Pensa se devi sviluppare il gioco della battaglia navale con navi di 1 sola casella: avrai una griglia per ogni giocatore. Decidi di implementare la griglia come matrice bidimensionale di interi (chiamata gametable), dove il valore dell'intero rappresenta lo stato di quella cella (0 = acqua; 1 = nave; 2 = mancato; 3 = colpito). Ora se tu nel codice dovresti in qualche momento ad esempio controllare se in una certa cella (di coordinate x,y) c'è una nave o meno, e se c'è se è affondata o meno, dovresti scrivere qualcosa tipo:
C:
int gametable[rows][cols];
/* ... */
if (gametable[x][y] == 1) {
/* nave */
} else if (gametable[x][y] == 3) {
/* nave affondata */
} else {
/* niente nave */
}
Il codice è ben poco chiaro: si capisce se ci sono i commenti, ma altrimenti non si capirebbe cos'è 1, cos'è 3, ecc.
Allora puoi usare un enumeratore, e implementare quindi la griglia come matrice bidimensionale del tipo dell'enumeratore:
C:
enum gamecell {
CELL_WATER,
CELL_SHIP,
CELL_MISS,
CELL_SUNK
};
Ora puoi fare così:
C:
enum gamecell gametable[rows][cols];
/* ... */
if (gametable[x][y] == CELL_SHIP) {
/* nave */
} else if (gametable[x][y] == CELL_SUNK) {
/* nave affondata */
} else {
/* niente nave */
}
Il codice è molto più chiaro.
Quelle costanti (CELL_SHIP, CELL_WATER, ecc.) in realtà non sono altro che costanti intere. Volendo, puoi esplicitare i valori:
C:
enum gamecell {
CELL_WATER = 0,
CELL_SHIP = 1,
CELL_MISS = 2,
CELL_SUNK = 3
};
Quando il compilatore passa sul codice, prende tutte le costanti che trova e le sostituisce con i valori corrispondendi prima di compilare. E ovunque trova una variabile definita col tipo enum, lo sostituisce con il tipo int. Alla fine, il risultato è identico a quello del primo codice che ho scritto, però è molto più leggibile. Principalmente, gli enumeratori si usano per migliorare la leggibilità del codice.