2013-02-07 217 views
1

我寫在c中,使用Visual c + +。語法錯誤:在'之前'缺少']';'數組聲明錯誤C

編譯器給我用下面的代碼中的錯誤:

#define SIZE 3; 
int myMatrix[SIZE][SIZE]; 
void funcMatrix(int M[SIZE][SIZE]); 

的錯誤,我得到:

error C2143: syntax error : missing ']' before ';' 
error C2059: syntax error : ']' 

我用盡不同的聲明不變,內主外。它仍然不起作用。 如果有人能幫助我,我會非常感激...

+8

'#define SIZE 3;'移除';'。 – nhahtdh

回答

10

您應該使用#define SIZE 3

預處理工程作爲原料字符串替換,所以用#define SIZE 3;SIZE替換3;,你會得到:

int myMatrix[3;][3;]; 
void funcMatrix(int M[3;][3;]); 

作爲最終結果,因此錯誤。這是一個常見的錯誤,那麼你習慣於在C表達式的末尾放置;。然而,preprocessor#define實際上不是C代碼,而是編譯之前發生的簡單(或不那麼簡單)的字符串處理操作。

+0

感謝您的快速幫助。欣賞它。現在完美運作。 – kype

1

你改變:

#define SIZE 3; 

#define SIZE 3 
1

您需要#define SIZE 3後去除;

#define s切勿需要一個分號

3

在你的代碼SIZE將被定義在這種情況下3;所以你必須

int myMatrix[3;][3;]; 
void funcMatrix(int M[3;][3;]); 

這會導致一個語法錯誤,所以在使用替代#define SIZE 3(不含;)而不是#define SIZE 3;

3

A #define NAME從字面上插入NAME後的值。

你的宏展開

int myMatrix[3;][3;]; 

宏定義中刪除;

1

你可以看到編譯器看到的東西。 它可以是一個爛攤子,如果你不註釋掉包含的頭文件, ,我不知道如何做到這一點在Visual C++, 但GCC運行

gcc -E xx.c > xx.e 

,你看看你的代碼在處理#define後展開。 也必須有一些方法可以用Visual C++來做到這一點。 然後,您仍然可以將.e文件編譯爲c代碼。

相關問題