I'não tenho certeza qual é a sintaxe adequada para usar os enumeros em C. Eu tenho o seguinte código:
enum {RANDOM, IMMEDIATE, SEARCH} strategy;
strategy = IMMEDIATE;
Mas isto não se compila, com o seguinte erro:
error: conflicting types for ‘strategy’
error: previous declaration of ‘strategy’ was here
O que estou a fazer mal?
A declaração de uma variável enumerativa é feita desta forma:
enum strategy {RANDOM, IMMEDIATE, SEARCH};
enum strategy my_strategy = IMMEDIATE;
No entanto, você pode utilizar um 'tippedef' para encurtar as declarações de variáveis, assim:
typedef enum {RANDOM, IMMEDIATE, SEARCH} strategy;
strategy my_strategy = IMMEDIATE;
Ter uma convenção de nomenclatura para distinguir entre tipos e variáveis é uma boa ideia:
typedef enum {RANDOM, IMMEDIATE, SEARCH} strategy_type;
strategy_type my_strategy = IMMEDIATE;
Quando você diz
enum {RANDOM, IMMEDIATE, SEARCH} strategy;
você cria uma única variável de instância, chamada 'strategy' de um enumero sem nome. Isto não é muito útil - você precisa de um typedef:
typedef enum {RANDOM, IMMEDIATE, SEARCH} StrategyType;
StrategyType strategy = IMMEDIATE;
Vale mencionar que **em C++*** você pode usar "enum" para definir um novo tipo sem precisar de uma declaração de digitação.
enum Strategy {RANDOM, IMMEDIATE, SEARCH};
...
Strategy myStrategy = IMMEDIATE;
Eu acho esta abordagem muito mais amigável.
[editar - esclarecer o estado do C++ - eu tinha isto no original, depois removi!]