PDA

View Full Version : mi illuminate sugli enum?


NA01
01-12-2006, 10:50
vi spiego il problema:
ho sempre pensato ce un enum di 4 elementi per un pc fosse un numero che va da 0 a 3...
perchè allora se faccio un enum di 4 elementi (in realtà anche per qualcuno in più è la stessa cosa) sizeof dice che è di 4 byte?

ciaaaao!

NA01
01-12-2006, 10:56
riformulo...
perchè è un grosso come un int e non come un char? è una specifica del c o semplicemente il compilatore se ne batte le palle di ottimizzarlo?

ciaaaao

andbin
01-12-2006, 11:07
vi spiego il problema:
ho sempre pensato ce un enum di 4 elementi per un pc fosse un numero che va da 0 a 3...
perchè allora se faccio un enum di 4 elementi (in realtà anche per qualcuno in più è la stessa cosa) sizeof dice che è di 4 byte?enum serve per dichiarare un set di costanti a cui associare un valore intero.

Quindi dato per esempio:
enum direzioni
{
nord = 0,
sud,
est,
ovest
};

printf ("%d\n", sizeof (nord));
stampa 4 perché il valore di una enum ha la stessa occupazione di memoria di un intero.

e

enum direzioni d;
printf ("%d\n", sizeof (d));
stampa pure 4 perché una variabile di tipo enum ha di nuovo la stessa dimensione di un intero.

71104
01-12-2006, 15:17
riformulo...
perchè è un grosso come un int e non come un char? è una specifica del c o semplicemente il compilatore se ne batte le palle di ottimizzarlo? veramente è già ottimizzato: risparmiare 3 byte non ti darebbe alcuna convenienza rispetto a lavorare con un tipo di dato della dimensione del bus, a meno che non hai definito un array *enorme* di enum. altrimenti perché MFC userebbe BOOL anziché bool?

ilsensine
01-12-2006, 15:27
riformulo...
perchè è un grosso come un int e non come un char? è una specifica del c o semplicemente il compilatore se ne batte le palle di ottimizzarlo?

Oltre al motivo dell'allineamento, c'è anche questo:

enum {
v1 = 10,
v2 = 1000,
v3 = 10000,
...
}

Il char comincia a diventare un pò stretto...