2011-04-01 56 views
2

我似乎无法找出我的代码是用C编写的,我不断收到各种各样的错误, t错误。反正这里的代码:使用枚举类型和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]; 
... 

说着什么效果:

错误:各种变型“变量”在文件范围内

这是针对上述每一行。这是为什么发生?

回答

1

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

+1

即使在C99中,您也不能拥有静态存储持续时间的变长数组 - 这是OP的错误消息所说的。 – caf 2011-04-01 02:21:10

+0

@caf谢谢。我对C99不够熟悉,所以我可能应该刚刚在开始时放弃了整个声明,但我试图完成。现在编辑。 – jonsca 2011-04-01 02:29:53

4

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

+0

OP在标题中指定C. – jonsca 2011-04-01 01:35:39

+1

@jonsca同意..我觉得额外的信息不会伤害... #define在C++中是丑陋的风格 – Splat 2011-04-01 02:30:01

+0

是的,我宁愿在任何一天“拥有”一个“const int”。 :) – jonsca 2011-04-01 02:31:51