2011-09-08 2 views
40

私はFUSEから、このサンプルコードを読んでいます。具体的C関数の先頭で「変数名」は何をしますか?</p> <p><a href="http://fuse.sourceforge.net/helloworld.html">http://fuse.sourceforge.net/helloworld.html</a></p> <p>そして、私は次のコードスニペットは何をするかを理解悩み抱えています:

static int hello_readdir(const char *path, void *buf, fuse_fill_dir_t filler, 
         off_t offset, struct fuse_file_info *fi) 
{ 
    (void) offset; 
    (void) fi; 

、(無効)、「変数名を"事。これまで私はCプログラムでこの種の構造を見たことがないので、Googleの検索ボックスに何を入れるべきか分からない。私の現在の最良の推測は、使用されていない関数パラメータのための特定の種類の指定子ですか?誰がこれが何であるかを知っていて、私を助けてくれるなら、それは素晴らしいことでしょう。ありがとう!

+1

それは、コンパイルしていますか? –

+0

ヒューズコードを読んでいるうちにここに来た:D –

答えて

76

いくつかのコンパイラの警告を回避します。一部のコンパイラは、関数のパラメータを使用しないと警告します。このような場合、意図的にそのパラメータを使用していない可能性があります。何らかの理由でインタフェースを変更できない場合でも、警告を停止したい場合があります。その(void)鋳造構造は、警告を消し去るノーオペレーションです。ここで打ち鳴らすを使った簡単な例です:-Wunused-parameterフラグとプレストを使用して

int f1(int a, int b) 
{ 
    (void)b; 
    return a; 
} 

int f2(int a, int b) 
{ 
    return a; 
} 

ビルド:

$ clang -Wunused-parameter -c -o example.o example.c 
example.c:7:19: warning: unused parameter 'b' [-Wunused-parameter] 
int f2(int a, int b) 
       ^
1 warning generated. 
+1

+1の例): – Macmade

+0

'#define IGNORE_UNUSED(var)(void)(var)'を使うのはもっと意味がありませんか? – orlp

+0

@ nightcracker、私は "もっと意味"が何を意味するのか分かりませんが、OPの使い方はかなり一般的なイディオムです。 –

5

それは、コードの面で、何もしません。

ここでは、これらの変数(その場合はパラメータ)が使用されていないことをコンパイラに伝え、-Wunusedの警告を防止します。これを行うには

もう一つの方法は、使用することです。

#pragma unused 
関連する問題