Ошибки при компиляции кода C с перечислимыми и typedef массивами - PullRequest
2 голосов
/ 01 апреля 2011

Кажется, я не могу выяснить, что не так с моим кодом, написанным на C. Я продолжаю получать всевозможные ошибки по поводу того, что я почти уверен, что это не ошибки. В любом случае вот код:

    int  numKeyWords   =   6,
         idMaxLength   =   8,        
         maxLineLength =   80,         
         numSymbols    =   26;        
    char blankID[]    = "          "; 

    enum symbol{GREATEQ, LESSEQ, EQUAL, NOTEQ, GREAT, LESS, PLUS, MINUS, TIMES, DIVIDE,
                LBRACE, RBRACE, LPAREN, RPAREN, LBRACK, RBRACK, SEMICOLON, COMMA,
                ASSIGN, WHILE, DO, END, IF, THEN, ELSE, NUMBER, IDENT, BAD};

    enum symbol SY;
    enum symbol symbols[numKeyWords];
    enum symbol specialSymbols[UCHAR_MAX+1];

    typedef char alpha[idMaxLength+1];

    alpha idname;                        
    char chara;                          
    char line[maxLineLength];          
    int charCounter;                  
    int lineCounter;                    
    int charLineCounter;                 
    alpha keyWords[numKeyWords];          
    int isEOF = FALSE;                   

    alpha symbolNames[numSymbols];  

Я получаю ошибки именно по этим строкам:

...
enum symbol symbols[numKeyWords];
....
typedef char alpha[idMaxLength+1];
...
char line[maxLineLength];
...
alpha keyWords[numKeyWords]; 
...
alpha symbolNames[numSymbols];   
...

Говоря что-то с эффектом:

ошибка: изменяемая переменная «VARIABLE» в области действия файла

и это для каждой из приведенных выше строк. Почему это происходит ??

Ответы [ 2 ]

4 голосов
/ 01 апреля 2011

Размер массива со статической продолжительностью хранения не может быть переменной;компилятор должен уметь вычислять, насколько он велик во время компиляции.Измените переменные размера вашего массива на #define s (или const s, если вы используете C ++).(Все переменные в области видимости имеют статическую продолжительность хранения).

1 голос
/ 01 апреля 2011

Поместите каждую из ваших int-констант в оператор #define. Размер массива фиксированной длины должен быть известен во время компиляции.

...