2010-10-30 87 views
-1

每個我編譯我的C項目時,我得到不同的錯誤。有3套他們在建設過程中隨機出現,所有的人都編譯器隨機拋出不同的錯誤

syntax error before 'foo' 

syntax error before 'foo' token. 

它們發生在不同的文件,並沒有明顯的語法錯誤在那裏。我使用Windows 7,Eclipse與C/C++插件來製作一個C項目和gcc 3.4.5(mingw-vista特殊版本r3)。正在使用以下標誌:

-O0 -g3 -Wall -c -fmessage-length=0 

我檢查並重新檢查了所有我的文件以進行預處理器語法錯誤,但沒有發現任何內容。

我的源代碼中有哪些錯誤可以產生這種奇怪的行爲?我將來如何避免這種頭痛?

回答

0

我發現錯誤,它是一個相互「包含」聲明。

Client.h包括Cashier.h其中還包括Client.h ...

顯然,這可以產生在完全不相關的線語法錯誤(甚至是文件!)。

+1

這就是爲什麼你需要使用包括守衛。您還需要儘量避免這樣做,因爲這原則上會導致C預處理器中的堆棧溢出。 – RBerteig 2010-10-31 00:33:14

1

雖然在沒有源代碼的情況下診斷編譯錯誤基本上是不可能的,但我會給它一個機會。

看似無法解釋的語法錯誤可能會導致例如通過丟失或多餘的括號或分號。至少這幾乎總是我在編譯器抱怨的代碼沒有任何問題時找到的。所以,不要只看同一行代碼,也要看看以前的代碼行。

我能想到的另一個可能的原因是您的源代碼使用了非標準的C特性或語法。或者您的源代碼使用C99功能,而您的編譯器採用C89語法。

+0

對不起,不提供源,但錯誤將通過項目真的散,我不得不鏈接這一切。我也檢查了所有被標記爲錯誤的文件的語法。 – BoppreH 2010-10-30 23:58:22