2012-11-11 9 views
8

GCCに使用するように指示することは可能ですか?warn_unused_result対応する属性がなくてもすべての機能にフラグを設定しますか?戻り値をチェックするのを忘れることができれば、GCC固有の属性を追加することも忘れることができます。GCCですべての機能にwarn_unused_resultを適用する

他のコンパイラでも可能であることがわかりました。

+0

私は答えはノーだと思いドキュメントを見直しから。 –

+0

代替:あなたはsplintを通してプログラムを実行し、無視された戻り値をテストすることができます:http://www.splint.org – justin

+0

それをサポートするコンパイラはどれですか? – sinelaw

答えて

1

いいえ、あなただけの-Wno-unused-resultですべてwarn_unused_resultのフラグを無視するようにGCCを伝えることができますが、それぞれの-Wunused-resultは(フラグのみに警告する)デフォルトを設定します。 -Wall -Wextra -pedanticを使用してコンパイルすると、有効にすることはできますが、有効にできない場合は警告が表示されます。

これ以外にも、なぜこれを望んでいるのだろうか、関数の結果を無視するのは珍しいことではなく、すべてのライブラリで警告が発生する可能性があります。

+2

私たちは独自のライブラリを作成しており、可能な限り多くのエラーを除外したいと考えています。数日前、私はプログラマーの一人が__fread__の結果をチェックしていないことに気付きました。実際、そのようなケースは非常にまれですが、組み込み機器のリソースが不足している場合には、私たちのライブラリはマスターアプリをクラッシュさせることなくそれを処理する必要があります。だから、できるだけ多くの小切手に従いたいと思っています。 – PoltoS

+0

@PoltoS:C++を使用していた場合は、戻り値の型をラップする方法があるかもしれませんが、それは 'warn_unused_result'のように動作します。 – bitmask

+0

私たちはCを使用しています... GCCはこのようなフラグを提供していません。そのようなフラグを各機能に「事実上」追加するために少しハックすることは可能でしょうか? – PoltoS

0

GCCでは可能ではないようですが、カバレッジや糸くずなどの静的アナライザーを使用してこれらを捕らえることができます。

+0

約5年後に良い答え;) カバーはSAASです。会社のコードをサードパーティ製のサーバーにアップロードすることはできません。さらに、第3の部分サーバーは、私の環境とシステムインクルードファイルについて何も知らない。私はプラットフォーム固有のタイプに不平を言っていない、今までのところ良いスタティック・アナライザを見つけられませんでした。 – PoltoS

+0

CoverityがSaaSのみの提供であるかどうかはわかりません。私の雇用者はカバー率を使用しており、コードは組織のサーバーから離れないと信じています。 https://community.synopsys.com/s/question/0D53400003RpaYWCAZ/can-coverity-connect-be-installed-in-an-isolated-environment – Soorajchirag

0

clangプラグインが、elfs-clang-plugins(自分自身で作成したオープンソース)にあります。

GCC用ではありませんが、GCC用ではありませんが、まだ有効です。 CIのゲートキーピングプロセス(ある場合)に追加したり、手動で一度だけ実行したりすることができます。

warn_unused_resultプラグインは、warn_unused_result属性がないの機能に対して警告を発します。プラグインは、現在のコンパイル単位で宣言または定義されている関数のみを考慮します。したがって、外部ライブラリはノイズを追加しません。

プラグインはオプションのarg、--static-onlyを受け入れます。これにより静的関数(外部APIを変更することが多すぎる場合)についてのみ警告します。

例:

int foo(void); 

コンパイラ出力:

/tmp/test.c:1:5: warning: missing attribute warn_unused_result 
int foo(void); 
関連する問題