2011-03-05 467 views
1

有幾個人在這裏評論我的C代碼,說我應該使用常量作爲循環計數器,而不是難寫它們。我同意他們,因爲這是我編寫Java代碼時的做法,但是當我嘗試在數組聲明和循環條件中使用常量時,我​​遇到了編譯時錯誤。C常量拋出編譯時錯誤

要在C中聲明常量,語法是#define NAME value

在我的代碼中,我有兩個常量,BUFFER是文件讀取緩衝區,而PACKED是輸出數組大小。

我用BUFFER初始化char inputBuffer[BUFFER];作爲一個全局變量,它的工作原理,但是當我嘗試使用PACKED

#define PACKED 7; // this line is in the header of file, just below preprocessors 
int packedCount; 
char inputPack[PACKED]; //compression storage 
for (packedCount=0; packedCount<= PACKED; packedCount++){ 

我得到的循環起始線是在char inputPack[PACKED]error: expected ‘]’ before ‘;’ token
error: expected expression before ‘;’ token。當我7

+0

你在'char inputPack [PACKED]'末尾缺少一個分號' – Marlon 2011-03-05 13:39:01

+0

正如馬龍所說的那樣。這是一個錯字嗎? – wong2 2011-03-05 13:40:56

+1

請準確粘貼你編譯的代碼 – wong2 2011-03-05 13:42:58

回答

3

顯然,您不會像在源文件中那樣發佈代碼。

至少,您在char inputPack[PACKED]之後錯過了分號。

我強烈懷疑您的真實源代碼在宏聲明的末尾有分號,這會導致錯誤。宏定義不應以分號結尾。

+0

+1:嗯,當然,現在我覺得愚蠢沒有發現:) – Erik 2011-03-05 13:47:40

+0

+1爲'你在你的宏聲明末尾包含分號' – wong2 2011-03-05 13:48:37

+0

就是這樣。我認爲在將C語法與匹配的Java語法分開之前還需要一段時間。 – Jason 2011-03-05 14:34:00

2

更換PACKED這兩個錯誤消失是有;字符後失蹤inputPack[PACKED]

1

嘗試使用比包裝在一起,例如其他的東西PACKEDSIZE。它可能是你的編譯器使用PACKED作別的事情(例如與結構打包相關)。另外,正如其他答案所提到的,你缺少一個;

+1

帶大寫字母的宏不會被實現保留。他們還需要以下劃線開頭。我不記得實際的裁決(它在C和C++之間有所不同),但是'PACKED'不應該引起問題。 – rubenvb 2011-03-05 13:48:50

+0

不應該,也不會不會總是關聯:) - 但是,喬納森發現了我相信的真正問題。 – Erik 2011-03-05 13:50:03