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 ?
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;
Quand vous dites
enum {RANDOM, IMMEDIATE, SEARCH} strategy;
vous créez une variable d'instance unique, appelée 'stratégie' ; 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;
Il convient de mentionner que en C++ vous pouvez utiliser "enum" ; 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é].