246

例えば:

Bool NullFunc(const struct timespec *when, const char *who)
{
   return TRUE;
}

/*...*/C++ では、パラメーターの周りにコメントを付けることができました。もちろん、Cではエラーが発生します。

エラー: パラメータ名が省略されました

4

12 に答える 12

347

私は通常、次のようなマクロを記述します。

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

このマクロは、未使用のすべてのパラメーターに使用できます。(これはどのコンパイラでも機能することに注意してください。)

例えば:

void f(int x) {
    UNUSED(x);
    ...
}
于 2010-08-30T09:16:32.503 に答える
131

GCC では、パラメータにunused属性のラベルを付けることができます。

変数に付加されるこの属性は、変数が使用されない可能性があることを意味します。GCC は、この変数に対して警告を生成しません。

実際には、これは__attribute__ ((unused))パラメーターの直前に配置することで実現されます。例えば:

void foo(workerid_t workerId) { }

になる

void foo(__attribute__((unused)) workerid_t workerId) { }
于 2010-08-30T09:24:58.693 に答える
69

GCC またはClang未使用属性を使用できます。ただし、これらのマクロをヘッダーで使用して、ソース全体に GCC 固有の属性が含まれないようにしています__attribute__

#ifdef __GNUC__
#  define UNUSED(x) UNUSED_ ## x __attribute__((__unused__))
#else
#  define UNUSED(x) UNUSED_ ## x
#endif

#ifdef __GNUC__
#  define UNUSED_FUNCTION(x) __attribute__((__unused__)) UNUSED_ ## x
#else
#  define UNUSED_FUNCTION(x) UNUSED_ ## x
#endif

それからあなたはできる...

void foo(int UNUSED(bar)) { ... }

barコードのどこかで使用しようとするとエラーが発生するので、誤って属性を残すことができないので、私はこれを好みます。

そして機能については...

static void UNUSED_FUNCTION(foo)(int bar) { ... }

注1):

私の知る限り、MSVCには__attribute__((__unused__)).

注2):

UNUSEDマクロは、括弧を含む引数に対しては機能しないため、実行できない
ような引数がある場合、または. これは、これまでに見つけたマクロの唯一の欠点であり、これらの場合は に戻ります。float (*coords)[3]
float UNUSED((*coords)[3])float (*UNUSED(coords))[3]UNUSED(void)coords;

于 2012-10-15T07:39:59.430 に答える
22

未使用の属性を持つ GCC の場合:

int foo (__attribute__((unused)) int bar) {
    return 0;
}
于 2013-12-20T13:09:57.163 に答える
5

属性にラベルを付けるのが理想的な方法です。MACRO は混乱を招くことがあります。void(x) を使用することで、処理にオーバーヘッドが追加されます。

入力引数を使用しない場合は、

void foo(int __attribute__((unused))key)
{
}

関数内で定義した変数を使用しない場合

void foo(int key)
{
   int hash = 0;
   int bkt __attribute__((unused)) = 0;

   api_call(x, hash, bkt);
}

後でロジックにハッシュ変数を使用しますが、bkt は必要ありません。bkt を未使用として定義します。それ以外の場合、コンパイラは「bkt set bt not used」と言います。

注: これは、最適化のためではなく、警告を抑制するためのものです。

于 2014-02-28T17:44:54.160 に答える
0

私はこのスタイルが使用されているのを見ました:

if (when || who || format || data || len);
于 2010-08-30T10:51:42.387 に答える
0

記録として、私はジョブの答えが好きですが、「何もしない」ステートメントで変数名を単独で使用するだけのソリューションに興味があります。

void foo(int x) {
    x; /* unused */
    ...
}

確かに、これには欠点があります。たとえば、「未使用」の注記がないと、意図的なコード行ではなく間違いのように見えます。

利点は、DEFINE が不要であり、警告が取り除かれることです。

于 2013-03-25T05:39:49.083 に答える