2012-09-12 47 views
1

我有一個從CMake腳本生成的C++ Xcode 3項目。它使用了一些開源的標題之前,但在這個項目中我得到一個編譯錯誤Extra ';'時,尾部的支架有一個uneccessary分號它一直工作:「額外」;「 「在Xcode C++項目中編譯錯誤

if(...) 
{ 
... 
}; 

是否有這使得尾隨分號一些編譯器選項一個錯誤,我可以關閉?

這裏是有問題的文件之一,見行259:http://zziplib.svn.sourceforge.net/viewvc/zziplib/trunk/zzip-0/zzip/zzip.h?revision=523&view=markup

+0

分號的'if'語句的結束'}'應該是完全合法的下面。在這種情況下,它只是一個空聲明。你提到標題,所以我懷疑你在聲明後實際上有一個流浪分號。請向我們展示一個實際的代碼片段。你能告訴我們你使用的開源頭文件嗎?你能修好頭部嗎? –

+0

@KeithThompson,添加了一個鏈接到真實文件。 –

回答

4

分號警告來的-pedantic(或-pedantic-errors)選項的禮遇;我不認爲你可以單獨禁用它。

我建議刪除分號而不是警告。

+0

僅僅因爲一個CMake腳本不喜歡它就改變了一個穩定的,廣泛使用的FOSS項目,這對我來說似乎是錯誤的!我會向任何維護CMake腳本的人報告,謝謝。 –

+0

'-pedantic'產生一個警告,'-pedantic-errors'錯誤。 – juanchopanza

+0

@John:頭文件無效C++。你期望CMake腳本的維護者怎麼做呢? zziplib的維護者應該願意修復這些錯誤。 (我會自己聯繫他。) –

2

在示例代碼中的多餘的分號,你向我們展示:

if(...) 
{ 
... 
}; 

是完全合法的;這是一個空聲明。

您遇到的錯誤實際上是關於extern "C"上的額外分號。在三個源文件中出現以下的zziplib庫:

#ifdef __cplusplus 
extern "C" { 
#endif 

... 

#ifdef __cplusplus 
}; 
#endif 

這其實是一個語法錯誤。一些編譯器可能不會抱怨它,或者可能只發出警告,但是這是一個致命的錯誤。

我報道這個問題的zziplib維護者,而我剛剛得到的答覆:

Thanks for pointing to the problem, fixed in r524 now. I will 
probably roll a public release next month (still need to check 
the win32 version). 

best regards, Guido Draheim 

ChangeLog: 

2012-09-15 guidod <[email protected]> 
    * zzip.h, plugin.h: "};" at end of extern-C produces build errors with 
     the default --pedantic-errors on newer CMake. Thanks to Keith Thompson 
     recognizing it - see http://stackoverflow.com/questions/12384280/