2011-10-12 51 views
0

我做的在C以下我們可以在結構聲明中使用#define常量作爲數組大小嗎?

#define MAX_DATA_SIZE 500; 

struct reliable_state { 

    char dataBuffer[MAX_DATA_SIZE]; 

} 

即我想使用的#define常量爲結構聲明數組的大小。 但上面的代碼中給出了奇怪的錯誤

.c:36: error: expected ‘]’ before ‘;’ token 

那麼,有沒有任何其他的方式做到這一點?

+2

刪除#define行的分號。它應該是'#define MAX_DATA_SIZE 500' –

回答

8

是的,你可以,只要刪除';'在定義行:

#define MAX_DATA_SIZE 500 

隨着定義你的編譯器會真正「看到」你的結構定義

char dataBuffer[500;]; 

這顯然是錯誤的。

3

當您使用#define時,右側的宏被定義爲「原樣」。例如。在這裏,你就必須將其校正成

#define MAX_DATA_SIZE 500 /* no semicolon */ 
1

一個非空的類對象宏定義的語法是

#define MACRO_IDENTIFIER REPLACEMENT 

注意,有這句法沒有終止的分號,不像用於C聲明和聲明。您分號成爲替代的一部分,插入,你使用的宏標識符,產生

char dataBuffer[500;]; 

這是一個語法錯誤,編譯器診斷。

相關問題