2012-02-28 2 views
0

これは何を定義し、どのように使用するのですか?これは何を定義しますか?

#define UNUSED(VAR) (void)&(VAR) 

どこにでも定義が必要ですか?これはヘッダーにあります。

編集 - 私はここで何が起こっているのか分かりません。これはvoid型にキャストされたマクロですか?変数を否定しないのですか?

+0

はい、それは 'void'にキャストするマクロです。 「変数を否定する」とはどういう意味ですか? –

+0

間違った単語、私はそれをnullにすることを意味..私は思います。それがintの場合、voidへのキャストは何をしますか? – SirYakalot

+0

何もしません。それがここで使われている理由です。これは、「この変数で何もしない」という明示的な方法です。 –

答えて

1

未使用のパラメータについてコンパイラの警告を受け取らないようにすることを意図しています。

より良い方法は、それを匿名のままにすることです。

void do_stuff(int x, int); 

この場合、2番目のパラメータは未使用です。いくつかの過負荷の目的のためにそこに存在する必要があるかもしれません。

ローカル変数に使用することに関しては、なぜローカル変数を宣言してから使用しないのか自分自身に尋ねなければなりません。

答えは、変数が時々使用されることがあるような方法でコード内にプリプロセッサを使用することです。しかし、その存在を前処理することは必ずしも現実的ではないかもしれません。

実際に変数を使用すると、未使用の変数を宣言してもエラーにはなりません。

+0

匿名のままにすることには2つの問題があります。まず、コードパスや条件付きでコンパイルされたブロックが変数を使用しない場合にのみ動作します。いくつかのことがあれば、それを匿名で残しておくと失敗することになります。第2に、匿名のままにしておくと、コード内で安全に無視されるかどうかを判断するために必要な変数が保持されているかどうかを判断することが困難になるため、 –

0

delcaredされているが参照されていない変数について、コンパイラが警告/警告を停止するために使用できるマクロです。このような警告をグローバルに無効にするには、コンパイラの#pragma設定で同じ結果を得るのが一般的です。

0

コンパイラで、変数が未使用のまま残っていると警告またはエラーが発生したときに使用します。このような定義を使用すると、状況を確認した場合に、これらの警告/エラーを抑止する「no-op」を挿入できます。例えば

void foo() 
{ 
    int x=0; 
    UNUSED(x); // don't warn me that x is not actually being used 
} 
2

それは未使用のパラメータと変数のための警告を回避するために存在します。単にvoidにキャストするだけで十分です:変数を使用し、キャストは通常は何もしません。私はただ&オペレータがここで何のために使われているかを推測することができます。多分それはprevent a conversion operator from being calledにあります。ただし、prevent an overloaded operator& from being calledはありません。あるいは、それが変数でのみ使用されていることを確認することもできますが、どちらでも完璧ではありません:it can be used on expressions that produce references.

関連する問題