2011-04-01 27 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