Dostałem dzisiaj taki kawałek kodu, który kiedyś (lata temu) się kompilował, a teraz niestety nie:
struct state_str
{
char *buf1;
char *buf2;
void (*routine)(char *);
struct state_str *next_state;
};
typedef struct state_str STATE;
extern STATE init_state[];
extern STATE load_name[];
static STATE straight_comment[] = {
{"\x01", "\x7f", NULL, straight_comment},
{"\x0a", "\x0a", NULL, straight_comment},
{END_STATE, "Invalid character in comment line", NULL, init_state}
};
static STATE init_state[] = {
{"#", "#", NULL, straight_comment},
{"(NAME,", "(NAME,", check_for_end, load_name},
{" ", "~", NULL, init_state},
{"\x0a", "\x0a", NULL, init_state},
{END_STATE, "Unknown start to line", NULL, init_state}
};
Komunikat błędu był mniej więcej taki:
error: static declaration of ‘init_state’ follows non-static declaration
error: previous declaration of ‘init_state’ was here
Rozwiązałem problem kompilacji poprzez wywalenie static
z definicji tych tablic, ale tak z czystej ciekawości zacząłem się zastanawiać czy da się inaczej, tak żeby zostawić te static
?