2010-11-04 10 views
6

gcc 4.4.4 c89declarar enumeración de alcance mundial

Tengo el siguiente en mi archivo state.c:

enum State { 
    IDLE_ST, 
    START_ST, 
    RUNNING_ST, 
    STOPPED_ST, 
}; 

State g_current_state = State.IDLE_ST; 

me sale el siguiente error cuando intento y compilar.

error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘g_current_state’ 

¿Hay algunos con la declaración de una variable de tipo enum en el alcance global?

Muchas gracias por todas las sugerencias,

Respuesta

19

Hay dos maneras de hacer esto en la recta C. utilizar el enum nombre completo en todas partes:

enum State { 
    IDLE_ST, 
    START_ST, 
    RUNNING_ST, 
    STOPPED_ST, 
}; 
enum State g_current_state = IDLE_ST; 

o (este es mi preferencia) typedef it:

typedef enum { 
    IDLE_ST, 
    START_ST, 
    RUNNING_ST, 
    STOPPED_ST, 
} State; 
State g_current_state = IDLE_ST; 

Prefiero el segundo, ya que hace que el tipo se vea como uno de primera clase, como int.

+0

+1 por preferir el segundo. –

2

Missing punto y coma después de la llave de cierre de la enum. Por cierto, realmente no entiendo por qué los errores de punto y coma son tan crípticos en gcc.

+0

No, esa no era la razón. Todavía estoy recibiendo el error. gracias – ant2009

2

State por sí mismo no es un identificador válido en su fragmento.

Necesita enum State o typedef el enum State a otro nombre.

enum State { 
    IDLE_ST, 
    START_ST, 
    RUNNING_ST, 
    STOPPED_ST, 
}; 

/* State g_current_state = State.IDLE_ST; */ 
/* no State here either ---^^^^^^   */ 
enum State g_current_state = IDLE_ST; 

/* o */

typedef enum State TypedefState; 
TypedefState variable = IDLE_ST; 
2

por lo que hay 2 problemas:

  1. Missing ; después enum definición.
  2. Cuando se declara la variable, utilice enum State en lugar de simplemente State.

Esto funciona:

enum State { 
    IDLE_ST, 
    START_ST, 
    RUNNING_ST, 
    STOPPED_ST, 
}; 

enum State g_current_state; 
Cuestiones relacionadas