web-dev-qa-db-ja.com

gccでは、-fpermissive警告をミュートする方法は?

-fpermissiveで警告にダウングレードできるエラーを発生させるサードパーティライブラリのファイルを含めています。しかし、これらの警告でコンパイルログを「汚染」したくないので、このメッセージを完全に無効にしたいと思います。

これまでのところ、ファイルを含めるときに-fpermissiveオプションに diagnostic pragma を設定しています。何かのようなもの:

#pragma GCC diagnostic Push
#pragma GCC diagnostic warning "-fpermissive"

#include <third-party-file.h>

#pragma GCC diagnostic pop

Gccは通常、-fフラグの「ポジティブ」バージョンと「ネガティブ」バージョンの両方を提供するため、「非許可」機能を無視することを考えました:

#pragma GCC diagnostic ignored "-fno-permissive"
#include <third-party-file.h>

しかし、-fpermissiveフラグの「ネガティブ」バージョンは存在しないようです(私はgcc 4.6.3を使用していますが、バージョン4.7.0 それがない )です。

この動作を模倣できる可能性はありますか?ありがとう!

22
piwi

tldr:GCC 4.7以降、fpermissive出力をオフにすることはできません。


これをここに投稿するだけで、可視性が向上します。残念ながら、zwolの回答(意図はよく、古いGCCバージョンのユーザーには役立つ可能性があります)は、GCCの最新バージョンでは機能しません。 GCC 4.8以降では、fpermissive出力をオフにすることはできません。 OPへのコメントのo11cは、これを追跡する次のバグを有益に提供します。

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81787

これは「RESOLVED INVALID」の状態であるため、オフにできないことは予想される動作であり、変更する予定はありません。

8
firebush

これには少し遅れるかもしれませんが、これらの1つはあなたが望むことをするべきです:

#pragma GCC diagnostic ignored "-fpermissive"

または

#pragma GCC diagnostic ignored "-pedantic"

「無視」とは、診断を完全に無効にする方法であり、-fpermissiveの逆は-pedanticです。これは、歴史的な理由によるものです。

12
zwol