質問

現在、質問のタイトルで出した警告に似たコンパイラの警告を受け取っています。などの警告...

warning: 'boost :: system :: generic_category'は定義されていますが使用されていません

warning: 'boost :: system :: posix_category'は定義されていますが使用されていません

warning: 'boost :: system :: errno_ecat'は定義されていますが使用されていません

warning: 'boost :: system :: native_ecat'は定義されていますが使用されていません

私が知る限り、プログラムはいかなる影響も受けていません。しかし、警告がぶらぶらするのは好きではありませんが、ブーストに関連して定義された何かが使用されていないどこかにぶら下がっているということ以外に、これらの警告が何を伝えようとしているのかわかりません。しかし、私が定義したすべてのものを使用しました。私が使用しているブーストライブラリは、ランダムライブラリとファイルシステムライブラリです。

警告のソースを確認すると、Boostのerror_category.hppファイルが表示され、「事前定義済みエラーカテゴリ」としてコメントされているいくつかの static const が強調表示されます。または「非推奨の同義語」。この問題は、ライブラリを使用する際のエラー処理(または不足)と関係があるのでしょうか?

これらの警告が表示される理由について、誰でも洞察を提供できますか?完全に何かが足りないのですか?

PS警告は最大レベルです。

役に立ちましたか?

解決

これは、Boost.Systemライブラリのerror_codeライブラリに関連しています。 Boost error_codesには、値とカテゴリの2つの属性が含まれます。ライブラリユーザーが独自のエラーカテゴリを設計できるようにerror_codesを拡張可能にするために、ブースト設計者は一意のエラーコードカテゴリを表す何らかの方法を必要としていました。単純なID番号では十分ではありません。カスタムエラーカテゴリのID番号が競合する2つのプロジェクトが発生する可能性があるためです。

したがって、基本的には、ベースクラス error_category を継承する静的オブジェクトの形式でメモリアドレスを使用することでした。これらの変数は、特定のエラーカテゴリの一意の識別子として機能する以外は、実際には何もしません。これらは本質的にメモリ内の一意のアドレスを持つ静的なダミーオブジェクトであるため、他のエラーカテゴリ「ID」と干渉しない独自のカスタムエラーカテゴリを簡単に作成できます。詳細については、こちらをご覧ください。 。

見ているのは、この設計決定の副作用だと思います。これらの変数は実際にはプログラムで使用されないため、コンパイラは警告を生成しています。言うだけで十分です、私はあなたが何か悪いことをしているとは思いません。

他のヒント

@Charles Salviaには同意しますが、少なくともBoost 1.44.0の時点で、これらの定義はラップされ、非推奨として除外されるようになりました。したがって、それらを使用しない場合は、ヘッダーファイルを含める前に次の行を含めるだけです。

#ifndef BOOST_SYSTEM_NO_DEPRECATED
#define BOOST_SYSTEM_NO_DEPRECATED 1
#endif

@ M.Tibbitsによって提案された BOOST_SYSTEM_NO_DEPRECATED を試してみましたが、一部の警告(Linuxで構築された大きなシステム)が削除されたようですが、すべてではありません。

ただし、 -I の代わりに -isystem を使用してブーストヘッダーを含める(およびそれらの問題を無視する)ことはうまくいきました。

https://exceptionshub.com/how-do-you-disable-the-unused-variable-warnings-coming-out-of-gcc.html

GNU GCCによる説明(斜め): http://gcc.gnu .org / onlinedocs / gcc / Directory-Options.html

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top