Comment définir un type énuméré (enum) en C ?

Je ne sais pas quelle est la syntaxe correcte pour utiliser les enums en C. J'ai le code suivant :

enum {RANDOM, IMMEDIATE, SEARCH} strategy;
strategy = IMMEDIATE;

Mais il ne compile pas, avec l'erreur suivante :

error: conflicting types for ‘strategy’
error: previous declaration of ‘strategy’ was here

Qu'est-ce que je fais de mal ?

Solution

La déclaration d'une variable enum se fait comme suit :

enum strategy {RANDOM, IMMEDIATE, SEARCH};
enum strategy my_strategy = IMMEDIATE;

Cependant, vous pouvez utiliser un typedef pour raccourcir les déclarations de variables, comme ceci :

typedef enum {RANDOM, IMMEDIATE, SEARCH} strategy;
strategy my_strategy = IMMEDIATE;

Avoir une convention de dénomination pour distinguer les types et les variables est une bonne idée :

typedef enum {RANDOM, IMMEDIATE, SEARCH} strategy_type;
strategy_type my_strategy = IMMEDIATE;
Commentaires (2)

Quand vous dites

enum {RANDOM, IMMEDIATE, SEARCH} strategy;

vous créez une variable d'instance unique, appelée 'stratégie&#39 ; d'un enum sans nom. Ce n'est pas une chose très utile à faire - vous avez besoin d'un typedef :

typedef enum {RANDOM, IMMEDIATE, SEARCH} StrategyType; 
StrategyType strategy = IMMEDIATE;
Commentaires (6)

Il convient de mentionner que en C++ vous pouvez utiliser "enum&quot ; pour définir un nouveau type sans avoir besoin d'une déclaration typedef.

enum Strategy {RANDOM, IMMEDIATE, SEARCH};
...
Strategy myStrategy = IMMEDIATE;

Je trouve cette approche beaucoup plus conviviale.

[edit - clarifié le statut de C++ - j'avais ceci à l'origine, puis je l'ai enlevé].

Commentaires (4)