71

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

CASSERT(isTrue) or CASSERT2(isTrue, prefix_)

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

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

4

8 に答える 8

110

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

未使用の警告を制御する GCC コンパイラ フラグには、次のものがあります。

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

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

-Wno-unused-function

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

于 2009-03-04T11:17:56.037 に答える
54

GCC が他のコンパイラと競合しないようにするための解決策

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

int VARIABLE_IS_NOT_USED your_variable;
于 2008-12-22T13:45:32.040 に答える
43

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

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

inline static foo()
{
}
于 2011-05-12T22:09:46.187 に答える
34

null ステートメントを作成し、結果を void にキャストできます。-Wallこれはコンパイラ間で移植可能であり、gcc は有効になっていても警告を表示しません-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);
于 2008-12-27T02:12:44.573 に答える
10
#define UNUSED_VAR     __attribute__ ((unused))

任意の変数について、そのタイプの前に上記のマクロを使用するだけです。たとえば、次のようになります。

UNUSED_VAR int a = 2;
于 2015-03-05T14:37:05.637 に答える
3

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

于 2008-12-27T01:33:39.970 に答える
2

どう-Wunused-labelですか?

于 2008-12-22T13:15:31.353 に答える