2009-07-22 21 views
4

私のC++コードはいくつかのライブラリ(重複したヘッダーベースのもの)とリンクしていますが、そのうちのいくつかはしばらく更新されていません。私は、警告またはエラーなしで、GCC 4.0上で-WallWextraでコードをコンパイルしていました。しかし、新しいバージョンのGCC(4.3)を使用しているので、私のファイルのいくつかは、他のライブラリのインクルードファイル(例えば、warning: type qualifiers ignored on function return type)から警告を出力しています(ライブラリのテンプレートコードが返されたポインタのrestrictキーワード)。同様に、私が使用しているクラスタ上のOpenMPIの若干古いバージョンの1つは、GCC 4.1でコンパイルしたときに多くの警告を表示します。他のライブラリのコンパイラの警告

質問は次のとおりです:警告を無効にするために何かすることができますか?は、他の人のコードの中にありますか?できるだけきれいで正確なコードを作成したいので(私はすべての警告を有効にしますが)、私のmakeプロセスが私が修正できない問題によって混乱している場合、目的は敗北します。コード内で特定の警告がグローバルに無効になるだけでいいですか?

答えて

4

インクルードディレクトリに名前を付けるときに-Iの代わりに-isystemを使用することが1つ考えられます。これはそれをシステムヘッダとして扱います。つまり、gccはその中にあるものについて警告を表示しません。

gccで他の治療法が提供されるかどうかはわかりませんが、最初にgccのドキュメントをチェックし、安全な側に置いてください。

+0

私は--isystemが他の何かを変えるとは思わない。これは私のアプローチであり、うまくいきました。唯一の問題は、独自のコード(ヘッダーでマクロが定義されている場所)でマクロ展開によってエラーが発生する可能性があることです。 –

3

は、この類似した質問への回答を参照してください:

Conditionally disable warnings with qmake/gcc?

私の提案は、独自のラッパーヘッダを介して間接的にサードパーティのヘッダを含めることで、これらのヘッダは、背面に、その後、プラグマとの警告をオフに#サードパーティーのヘッダーの#includesの後に。

1

別の同様の質問:リンクの記事で説明したよう Is there a way to disable all warnings with a pragma?

私はサードパーティのライブラリ内の任意の警告心配はなかったので、単純にそれらをすべて無視。すべてのインクルードがあらかじめコンパイルされたヘッダー内にあるため、特にうまく機能しました。

編集:おっとり、#pragma warning VC++?

+0

はい、vC++のみです。 gccはきめ細かい警告制御を持っていないようです。 – Eugene

関連する問題