81

FUSE からこのサンプル コードを読んでいます。

http://fuse.sourceforge.net/helloworld.html

そして、次のコード スニペットの動作を理解するのに苦労しています。

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;

具体的には、(void)「変数名」のこと。C プログラムでこの種の構文を見たことがないので、Google の検索ボックスに何を入力すればよいかさえわかりません。私の現在の最良の推測は、未使用の関数パラメーターのある種の指定子であるということですか? 誰かがこれが何であるかを知っていて、私を助けることができれば、それは素晴らしいことです. ありがとう!

4

2 に答える 2

118

これは、いくつかのコンパイラ警告を回避します。関数パラメーターを使用しない場合、一部のコンパイラーは警告を出します。このような場合、意図的にそのパラメーターを使用しなかった可能性があり、何らかの理由でインターフェイスを変更できず、それでも警告を閉じたいと考えています。その(void)キャスト構造は、警告を消すノーオペレーションです。以下は、clang を使用した簡単な例です。

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

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

-Wunused-parameterフラグと prestoを使用してビルドします。

$ 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.
于 2011-09-08T21:36:57.213 に答える
10

コードに関しては、何もしません。

-Wunused警告を防ぐために、これらの変数 (その場合はパラメーター) が使用されていないことをコンパイラーに伝えるためにここにあります。

これを行う別の方法は、次を使用することです。

#pragma unused
于 2011-09-08T21:37:31.793 に答える