2009-07-22 102 views
4

我將我的C++代碼鏈接到幾個庫(其中有幾個庫是基於頭文件的),其中一些庫在一段時間內沒有更新。我一直在GCC 4.0編譯我的代碼-WallWextra一段時間沒有任何警告或錯誤。但是,現在我使用的是更新版本的GCC(4.3),我的一些文件已經從其他庫的包含文件(例如,warning: type qualifiers ignored on function return type)打印警告,當庫的模板代碼在返回的指針上使用restrict關鍵字時)。同樣,我正在使用的羣集中的一個略微舊版本的OpenMPI,在使用GCC 4.1進行編譯時會打印出許多警告。在其他庫中編譯器警告

問題是:當我離開本地目錄讀取頭文件時,我可以做任何事情來禁止其他人的代碼中的警告?我想讓我的代碼儘可能乾淨和正確(因此,我啓用了所有警告),但是如果我的製作過程因無法修復的問題而混亂,目的就會失敗。我是否必須全局禁用在代碼中出現的特定警告?

回答

4

想到的一件事是在命名include目錄時使用-isystem而不是-I。這將它視爲系統標題,這意味着gcc不會在其中顯示任何警告。

雖然我不確定gcc是否會開始給他們一些其他的待遇。首先檢查gcc文檔,以確保安全。

+0

我不相信 - 系統改變了其他的東西。這是我的方法,並且運作良好。唯一的問題是,由於您自己的代碼中的宏擴展(頭文件定義宏),可能仍然存在錯誤。 – 2009-08-25 15:50:37

3

看到答案,這樣類似的問題:

Conditionally disable warnings with qmake/gcc?

我的建議是,通過自己的包裝頭部間接包括第三方頭,並且在這些頭切換警告了與編譯指示,然後再打開再次包含第三方標題的#includes。

1

另一個類似的問題:在聯交所描述 Is there a way to disable all warnings with a pragma?

我並不擔心在第三方庫中的任何警告,所以簡單地忽略他們。因爲所有包含都在預編譯頭文件中,所以工作得特別好。

編輯:哎呀,是#pragma警告只是VC++?

+0

是的,它只是vC++。海灣合作委員會似乎沒有細粒度的警告控制。 – Eugene 2009-07-22 17:43:04