2010-03-24 5 views
1

j'ai une déclaration ENUM:ENUM valeurs associées au c

enum qty { cars = 10, bikes = 9, horses = 9 ... } // total 28 

Comment pourrais-je ajouter toutes les valeurs associées de recenseur liste?

+4

Je ne comprends pense pas que vous vraiment ce que les énumérations sont censés être pour. Il semble que vous essayiez de les (mal) utiliser comme un substitut à un tableau associatif ou à une structure. –

+1

En outre, le code exécutable ne conserve pas les noms des 'enums'. Si vous voulez convertir entre la valeur 'enum' et le nom, vous devrez utiliser une table. –

Répondre

5

Vous ne pouvez pas savoir à l'exécution le contenu d'un enum en C.

En plus, cela ressemble à une mauvaise utilisation des énumérations. Vous devez les utiliser pour définir constantes que vous utiliserez dans votre code, pour ne pas stocker des quantités ou des choses comme ce qui devrait normalement être variable: les valeurs d'énumération sont immuables. Utilisez des tableaux d'entiers à cette fin. vous pouvez passer en revue ceux-ci.

3

Il n'y a pas moyen d'exprimer « pour tous les énumérations à qty » en C.

1

Il n'y a aucun moyen de boucle à travers eux en C (vous pourriez en Ada ;-) donc c'est tout ce que vous pouvez faire:

int sum = cars + bikes + horses + ...; 

mais comme zneak et Tyler dit, vous n'êtes probablement pas en utilisant la bonne construction.

1

En C, les énumérations sont simplement mappées sur des entiers. Ils ne sont même pas sûrs, car vous pouvez librement substituer les membres d'une énumération dans des endroits destinés à d'autres enums.

0

Si vous avez un très grand nombre de ces derniers à garder synchronisés alors certains abus de préprocesseur pourrait être utile:

#define SUM(name, count) + (count) 
#define DEF(name, count) name = (count), 

enum qty 
{ 
# define QTY(f) \ 
    f(cars, 10) \ 
    f(bikes, 9) \ 
    f(horses, 9) 

    QTY(DEF) 

    total = 0 + QTY(SUM) 
};