web-dev-qa-db-ja.com

GCCで「定義されているが使用されていない」警告を非表示にするにはどうすればよいですか?

次のようなコンパイル時のアサートがたくさんあります。

CASSERT(isTrue) or CASSERT2(isTrue, prefix_)

GCCでコンパイルすると、'prefix_LineNumber' defined but not used。コンパイル時アサートの警告を非表示にする方法はありますか? GCCのドキュメントを検索することはできませんでした。同じマクロ内でvarが自動的にグローバルに使用される可能性があると思いましたが、それを行う方法は考えられませんでした。

GCCでその警告を隠す方法を知っている人はいますか?

60
user34537

この問題の解決策を探しているときに、このスレッドを見ました。私が見つけた解決策を完全にするためにここに投稿します...

未使用の warnings を制御するGCCコンパイラフラグは次のとおりです。

-Wunused-function
-Wunused-label
-Wunused-parameter
-Wunused-value
-Wunused-variable
-Wunused (=all of the above)

これらのそれぞれには、Wの後に「no-」が挿入された対応する否定形式があり、警告をオフにします(たとえば、-Wallによってオンになった場合)。したがって、あなたの場合には、使用する必要があります

-Wno-unused-function

もちろん、これはコンパイル時のアサートだけでなく、コード全体で機能します。機能固有の動作については、 機能属性 をご覧ください。

94
Arnaud

GCCが他のコンパイラとの競合を引き起こさない解決策

#ifdef __GNUC__
#define VARIABLE_IS_NOT_USED __attribute__ ((unused))
#else
#define VARIABLE_IS_NOT_USED
#endif

int VARIABLE_IS_NOT_USED your_variable;
47
user34537

Nullステートメントを作成し、結果をvoidにキャストできます。これはコンパイラー間で移植可能であり、gccは-Wallおよび-Wextraが有効になっていても警告を出しません。例えば:

int var;    // var is not used
(void)var;  // null statement, cast to void -- suppresses warning

一般的な手法は、このためのマクロを作成することです:

#define UNUSED(x) ((void)(x))

int var;
UNUSED(var);
32
Adam Rosenfield

これは最も厄介な警告の1つですが、デッドコードをチェックするのが(時々)役に立つことがわかりますが。しかし、通常、デバッグ用の静的関数、または将来いつか役立つ可能性のある関数、または一時的にのみ使用される関数があり、それらをコード内に保持したいと考えています。

幸いなことに、この警告はインライン関数を気にしません。

inline static foo()
{
}
30
mastermemorex
#define UNUSED_VAR     __attribute__ ((unused))

変数の場合は、たとえば、型の前に上記のマクロを使用するだけです。

UNUSED_VAR int a = 2;
7
The joker

これは、静的アサートマクロの詳細を知らずに答えることは困難です。おそらく、この問題を回避するために別のマクロに変更できますか?提案されたようにマクロに「未使用」属性を追加するか、CASSERT()の別の形式を使用することができます。

いくつかの選択肢の説明を次に示します。

http://www.jaggersoft.com/pubs/CVu11_3.html

http://blog.kowalczyk.info/kb/compile-time-asserts-in-c.html

http://www.pixelbeat.org/programming/gcc/static_assert.html

3
Nathan Kurz

-Wunused-label

2
Tamas Czinege

この関数を次のディレクティブでラップします。プッシュとポップの間に配置されるすべてのコードは、未使用の関数について警告しません。コードの残りの部分(プッシュおよびポップ以外)は影響を受けません。

#pragma GCC diagnostic Push
#pragma GCC diagnostic ignored "-Wunused-function"

... your code

#pragma GCC diagnostic pop
2
Sasha Itin