Question Pourquoi utiliser enum quand #define est tout aussi efficace? [dupliquer]


Cette question a déjà une réponse ici:

Donc, une énumération fonctionne comme ceci:

enum {
  false,
  true
}

ce qui équivaut à

int false = 0
int true = 1

Pourquoi ne pas me substituer enum avec #define?

#define FALSE 0
#define TRUE 1

Pour moi, il semble qu'ils soient interchangeables. Je suis conscient que #define est capable de gérer les arguments, fonctionne donc d'une manière entièrement différente de enum. Quelles sont exactement les principales utilisations de enum Quand nous avons #define  dans ce cas?

Si je devais deviner, comme le #define est une fonctionnalité de préprocesseur, enum aurait des avantages à l'exécution. À quelle distance suis-je?

Merci d'avance.


12
2018-03-09 08:49


origine


Réponses:


Les avantages de l'énumération apparaissent lorsque vous avez une longue liste de choses à mapper en nombres et que vous voulez pouvoir insérer quelque chose au milieu de cette liste. Par exemple, vous avez:

poires 0
pommes 1
oranges 2
raisins 3
pêches 4
abricots 5

maintenant vous voulez mettre les mandarines après les oranges. avec #defines, vous devez redéfinir le nombre de raisins, de pêches et d'abricots. en utilisant enum, cela arriverait automatiquement. oui, c'est un exemple artificiel, mais j'espère que cela vous en donnera l'idée.


25
2018-03-09 09:03



Je trouve cela utile pour le débogage dans un environnement tel que gdb car les valeurs d'énumération sont gérées au moment de la compilation (où #define est une macro de préprocesseur) et donc disponibles pour l'introspection.


13
2018-03-09 08:51



Bien que votre question soit marquée comme C, il y a un gros avantage à écrire en C ++, vous pouvez placer enum: s dans les classes ou les espaces de noms. De cette façon, vous pouvez vous référer à vos constantes comme «SpaceshipClass :: galaxy».


3
2018-03-09 09:58



enum est une constante entière. il y aurait donc une vérification de type pendant le processus de compilation.


0
2018-03-09 09:32