未使用の変数警告をオフにするためにgccコンパイラに渡すスイッチを知りたいですか? Windowsのブーストでエラーが発生しますが、ブーストコードを変更したくありません。
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
は私の目標をオーバーライドしますか?
通常、-Wno-unused-variable
スイッチを使用します。ただし、プロジェクトでこれらのことを気にかけている場合、これは非常に有用な警告です。ただし、GCCがコードに含まれていないものについて警告し始めると、面倒になります。
警告を保持することをお勧めしますが、サードパーティプロジェクトのインクルードディレクトリには-isystem
の代わりに-I
を使用します。そのフラグは、GCCに、自分が制御できないものについて警告しないように指示します。
たとえば、-IC:\\boost_1_52_0
の代わりに、-isystem C:\\boost_1_52_0
と言います。
それが役に立てば幸い。がんばろう!
いくつかの警告のみを抑制する必要がある場合や、安全のために他の警告を保持したい場合があります。コードでは、GCCのunused属性を使用して、変数および仮パラメーターでさえ警告を抑制することができます。このコードスニペットがあるとしましょう:
void func(unsigned number, const int version)
{
unsigned tmp;
std::cout << number << std::endl;
}
この関数をハンドラーとして使用する必要がある場合、C++ Boostライブラリーでは非常に一般的な状況があります。次に、2番目の仮パラメーターversionが必要なため、関数の署名はハンドラーが必要とするテンプレートと同じです。そうでない場合、コンパイルは失敗します。ただし、関数自体にも実際には必要ありません...
警告から除外する変数または仮パラメーターをマークする方法は次のとおりです。
void func(unsigned number, const int version __attribute__((unused)))
{
unsigned tmp __attribute__((unused));
std::cout << number << std::endl;
}
GCCには他にも多くのパラメーターがあり、manページで確認できます。これは、C++だけでなくCプログラムでも機能し、ハンドラーだけでなく、ほぼすべての関数で使用できると思います。さあ、試してみてください! ;)
追伸:最近、テンプレートでBoostsのシリアル化の警告を抑制するためにこれを使用しました:
template <typename Archive>
void serialize(Archive &ar, const unsigned int version __attribute__((unused)))
編集:どうやら、私はあなたの必要に応じてあなたの質問に答えなかったようです、 drak0sha それを良くしました。私は主に質問のタイトルに続いたからです。うまくいけば、これはそのタイトルのためにここに来る他の人々を助けるかもしれない... :)
Gccを使用しており、選択したコードの警告を無効にする場合は、#pragmaコンパイラディレクティブを使用できます。
#pragma GCC diagnostic Push
#pragma GCC diagnostic ignored "-Wunused-variable"
( your problematic library includes )
#pragma GCC diagnostic pop
制御するコードについては、__attribute__((unused))
を使用して、特定の変数が使用されないことをコンパイラーに指示することもできます。
警告オプションの man gcc
を参照してください。そこには、unused
がたくさんあります
警告オプション
... -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wunused-but-set-parameter -Wunused-but-set-variable
それらのいずれかにno-
をプレフィックスすると、この警告が無効になります。
多くのオプションには、-fまたは-W ---で始まる長い名前が付いています。たとえば、-fmove-loop-invariants、-Wformatなどです。これらのほとんどは、正と負の両方の形をしています。 -ffooの否定形は-fno-fooになります。このマニュアルでは、これら2つの形式のうち、デフォルトではない方のいずれか1つのみを文書化します。
より詳細な説明は 警告を要求または抑制するオプション にあります。
-Wno-unused-variable
を使用すると動作するはずです。
Gccから出力される未使用の変数警告を無効にするにはどうすればよいですか?
Windowsのブーストでエラーが発生しますが、ブーストコードに触れたくありません...
Boost's Trac にアクセスして、Boostに対するバグレポートを提出します。
アプリケーションは、ライブラリの警告とエラーをクリアする責任を負いません。ライブラリは、独自の警告とエラーをクリアする責任があります。
コンパイラはすでにあなたに言っています、それはvalue
ではなくvariable
です。 -Wno-unused-variable
を探しています。また、g++ --help=warnings
を試して、使用可能なオプションのリストを確認してください。