2013-02-24 1 views
71

未使用の変数警告をオフにするためにgccコンパイラにどのスイッチを渡すのか知りたいですか?私は、Windows上でのブーストのうち、エラーが発生していると私はブーストコードに触れることをしたくない:どのようにgccから出てくる未使用の変数の警告を無効にしますか?

C:\boost_1_52_0/boost/system/error_code.hpp: At global scope: 
C:\boost_1_52_0/boost/system/error_code.hpp:214:36: error: 'boost::system::posix_category' defined but not used [-Werror=unused-variable] 
C:\boost_1_52_0/boost/system/error_code.hpp:215:36: error: 'boost::system::errno_ecat' defined but not used [-Werror=unused-variable] 
C:\boost_1_52_0/boost/system/error_code.hpp:216:36: error: 'boost::system::native_ecat' defined but not used [-Werror=unused-variable] 

私は-Wunused-value-Wno-unused-valueの両方を使用してみましたが、どちらも上記のメッセージを抑制しました。右のコマンドは何

は、ここに私のコンパイル行です:

g++ -g -fno-inline -Wall -Werror -Wextra -Wfloat-equal -Wshadow 
-Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Wno-conversion 
-Wdisabled-optimization -Wredundant-decls -Wunused-value -Wno-deprecated 
-IC:\\boost_1_52_0 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 
-c -o op.o op.cpp 

おそらく-Wallは私の目標を無効にしますか?

+0

エラーメッセージに多かれ少なかれ、 '-Werror = no-unused-variable'を試してください。 –

答えて

182

-Wno-unused-variableスイッチは通常のトリックを行うに見つけることができます。しかし、あなたのプロジェクトでこれらのことを気にしているなら、それは本当に役に立つ警告です。 GCCがあなたのコードにないことを警告し始めると、迷惑になります。

サードパーティプロジェクトのインクルードディレクトリには、-Iの代わりに-isystemを使用することをお勧めします。そのフラグはGCCに、あなたが制御できないものについて警告しないように指示します。

例えば、-IC:\\boost_1_52_0の代わりに、-isystem C:\\boost_1_52_0の代わりに。

希望します。がんばろう!

+40

+1 for -isystem、非常に便利 –

+0

この設定を追加するには?"プロジェクトの設定/ AVR GNU Cコンパイラ/その他"の下でそれをしましたが、無視されます(パスは正しく、警告を受け取ります)。ディレクトリ設定(相対パスのチェックボックスをオフにします)に追加するとAtmelStudioがクラッシュします。 – hfrmobile

+1

うわー、私はisystemについて知ってうれしいです。素晴らしい。 – Spacemoose

9

-Wno-unused-variableを使用すると効果があります。

+0

ああ、未使用変数、未使用値ではありません! – WilliamKF

+2

エラーを取り除き、警告を残したい場合は、 '-Wno-error = unused-variable'を実行してください。 –

+1

実際の警告は '[-Werror = unused-variable]'であることが実際に分かります。 –

3

コンパイラはすでにvalueではなくvariableではないことを伝えています。あなたは-Wno-unused-variableを探しています。また、利用可能なオプションの一覧を表示するには、g++ --help=warningsを試してください。

11

警告オプションのman gccを参照してください。そこには、unused

警告オプション
の全体の束を持っている... -Wunused -Wunused-機能-Wunused-ラベル-Wunused-パラメータ-Wunused-値は-Wunused変数セット - -Wunused-たが、パラメータ - 使用されている変数のセット

これらのいずれかに接頭辞no-を付けると、この警告が無効になります。

多くのオプションには、-fまたは-Wで始まる長い名前が付いています。たとえば、-fmove-loop-invariants、-Wformatなどです。これらのほとんどは正と負の両方の形をしています。負の形式の-ffooは-fno-fooになります。このマニュアルは、これらの2つの書式のうち、どちらがデフォルトでないかのどちらか一方のみを記載しています。

より詳細な説明はOptions to Request or Suppress Warnings

+0

「no-」に接頭辞を付けることはできません。 – RNA

-3

-Wallを削除しても問題はありません。 -Wallを削除すると、正当な警告も表示されなくなります。この場合は、-Wオプションを選択してください。または、すべての警告をカバーしたら、-Wno-unused-variableに変更する必要があります。

LOCAL_CFLAGS = -Wno-unused-variable -g 
+2

この情報は以前の回答には既に存在します。 – GManNickG

-3
export IGNORE_WARNINGS=1 

なお、表示の警告を行いますが、gccを使用して、選択したコードのための警告を無効にしたい場合は、あなたがの#pragmaコンパイラディレクティブを使用することができ、ビルド

51

を続行:

制御するコードについては、__attribute__((unused))を使用して、特定の変数が使用されていないことをコンパイラに指示することもできます。

+1

それはいくつかのGCCバグをモジューロしています:[バグC++/53431:C++プリプロセッサは#pragma GCC診断を無視します](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53431); [Bug C++/66943:GCCはOpenMPのUnknownプラグマをサポートしていても警告します](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66943)、および友人。 – jww

+0

Cソースコードで動作しませんでした。 – peterh

+0

#pragmaディレクティブは、あなたが何をしているのか、あなたが実際に使っているか分かっていない限り、あまり安全ではありません。並列化のためのOpenMP ...;) –

55

いくつかの警告のみを抑制し、安全であるように他の警告を保存する必要があることがあります。あなたのコードでは、GCCの未使用の属性を使って、変数や仮パラメータの警告を抑制することができます。 - C++ Boostライブラリではかなり一般的である(私見)

void func(unsigned number, const int version) 
{ 
    unsigned tmp; 
    std::cout << number << std::endl; 
} 

あなたはハンドラとして、この機能を使用する必要があるとき、状況があるかもしれません:あなたはこのコードスニペットを考えてみましょう。次に、第2の仮パラメータバージョンが必要です。そのため、関数のシグネチャはハンドラが必要とするテンプレートと同じです。そうでない場合、コンパイルは失敗します。

void func(unsigned number, const int version __attribute__((unused))) 
{ 
    unsigned tmp __attribute__((unused)); 
    std::cout << number << std::endl; 
} 

GCCは、他の多くのパラメータがあります。しかし、あなたは本当に変数や警告から除外される仮パラメータをマークするためにどのように解決策は、これは...

いずれかの機能自体にそれを必要としませんのマニュアルページで確認できます。これはC++だけでなく、Cプログラムでも動作します。ハンドラだけでなく、ほとんどの関数で使用できると思います。それを試してみてください! ;)

PS:最近、私はこのようなテンプレートでブースト直列化の警告を抑制するためにこれを使用:

template <typename Archive> 
void serialize(Archive &ar, const unsigned int version __attribute__((unused))) 

EDIT:あなたは、必要に応じてどうやら、私はあなたの質問に答えていない、drak0shaが良いことをやっ。私は主に質問のタイトルをたどったので、それは私の悪いです。うまくいけば、これはそのタイトルのためにここに来る他の人々を助けるかもしれない::)

+0

それでも、それは私が探していたものでした。 Thx :) –

+6

仮パラメータの場合、名前を省略することができます。 'void func(符号なし数値、const int)'です。そして、gccは未使用の 'version'についても不平を言うことはありません。 –

1

どのようにgccから出る未使用の変数の警告を無効にしますか?

あなたはBoost's Tracを訪問し、ブーストに対するバグレポートを提出...
は、私は窓にブーストのうち、エラーが発生していると私はブーストコードに触れることをしたくありません。

お客様のアプリケーションは、ライブラリの警告とエラーをクリアする責任がありません。ライブラリは、独自の警告とエラーをクリアする責任があります。

関連する問題