使用枚举和typedef数组编译C代码的错误

时间:2011-04-01 01:28:56

标签: c arrays compiler-errors typedef

我似乎无法找出我的代码有什么问题,这是用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 个答案:

答案 0 :(得分:4)

具有静态存储持续时间的数组的大小不能是变量;编译器需要能够弄清楚它在编译时的大小。将数组大小变量更改为#define s(如果您使用的是C ++,则为const s)。 (文件范围内的所有变量都具有静态存储持续时间)。

答案 1 :(得分:1)

将每个int常量放入#define语句中。必须在编译时知道固定长度数组的大小。