例えば:
Bool NullFunc(const struct timespec *when, const char *who)
{
return TRUE;
}
/*...*/
C++ では、パラメーターの周りにコメントを付けることができました。もちろん、Cではエラーが発生します。
エラー: パラメータ名が省略されました
例えば:
Bool NullFunc(const struct timespec *when, const char *who)
{
return TRUE;
}
/*...*/
C++ では、パラメーターの周りにコメントを付けることができました。もちろん、Cではエラーが発生します。
エラー: パラメータ名が省略されました
私は通常、次のようなマクロを記述します。
#define UNUSED(x) (void)(x)
このマクロは、未使用のすべてのパラメーターに使用できます。(これはどのコンパイラでも機能することに注意してください。)
例えば:
void f(int x) {
UNUSED(x);
...
}
GCC では、パラメータにunused
属性のラベルを付けることができます。
変数に付加されるこの属性は、変数が使用されない可能性があることを意味します。GCC は、この変数に対して警告を生成しません。
実際には、これは__attribute__ ((unused))
パラメーターの直前に配置することで実現されます。例えば:
void foo(workerid_t workerId) { }
になる
void foo(__attribute__((unused)) workerid_t workerId) { }
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;
未使用の属性を持つ GCC の場合:
int foo (__attribute__((unused)) int bar) {
return 0;
}
属性にラベルを付けるのが理想的な方法です。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」と言います。
注: これは、最適化のためではなく、警告を抑制するためのものです。
私はこのスタイルが使用されているのを見ました:
if (when || who || format || data || len);
記録として、私はジョブの答えが好きですが、「何もしない」ステートメントで変数名を単独で使用するだけのソリューションに興味があります。
void foo(int x) {
x; /* unused */
...
}
確かに、これには欠点があります。たとえば、「未使用」の注記がないと、意図的なコード行ではなく間違いのように見えます。
利点は、DEFINE が不要であり、警告が取り除かれることです。