2010-11-04 10 views
6

gcc 4.4.4 C89deklarowania enum w zakresie globalnym

Mam następujących w moim pliku state.c:

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

State g_current_state = State.IDLE_ST; 

otrzymuję następujący błąd, gdy próbuję i skompilować.

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

Czy są jakieś deklaracje zmiennej typu enum w zasięgu globalnym?

Wielkie dzięki za wszelkie sugestie,

Odpowiedz

19

Istnieją dwa sposoby, aby to zrobić w prosty C użyć pełnej nazwy enum wszędzie:

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

albo (jest to mój preferencje) typedef it:

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

Wolę drugą, ponieważ sprawia ona, że ​​typ wygląda jak pierwsza klasa, taka jak int.

+0

+1 za preferowanie drugiego. –

2

brakuje średnika po nawiasie zamykającym enum. Przy okazji, naprawdę nie rozumiem, dlaczego brakujące błędy średnika są tak tajemnicze w gcc.

+0

Nie, to nie był powód. Nadal dostaję błąd. dzięki – ant2009

2

State samo w sobie nie jest prawidłowym identyfikatorem w Twoim fragmencie.

Potrzebujesz enum State lub wpisać enum State pod inną nazwą.

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; 

/* lub */

typedef enum State TypedefState; 
TypedefState variable = IDLE_ST; 
2

Więc są 2 problemy:

  1. Brakujące ; po enum definicji.
  2. Podczas deklarowania zmiennej należy użyć enum State zamiast po prostu State.

to działa:

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

enum State g_current_state; 
Powiązane problemy