web-dev-qa-db-ja.com

C関数の先頭で(void) '変数名'は何をしますか?

私はヒューズからこのサンプルコードを読んでいます:

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の検索ボックスに何を入力すればよいかさえわかりません。私の現在の最善の推測は、それが未使用の関数パラメーターの何らかの指定子であるということですか?誰かがこれが何であるかを知っていて、私を助けることができれば、それは素晴らしいことです。ありがとう!

53
fyhuang

いくつかのコンパイラ警告を回避します。関数パラメーターを使用しない場合、一部のコンパイラーは警告します。このような場合、そのパラメーターを意図的に使用せず、何らかの理由でインターフェイスを変更できなくても、警告を閉じたい場合があります。その(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.
89
Carl Norum

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

-Wunused警告。

これを行う別の方法は、以下を使用することです:

#pragma unused
9
Macmade