1. ホーム
  2. c

C関数の先頭にある(void)'変数名'は何をするのでしょうか?[重複しています]。

2023-08-14 13:48:31

質問

このサンプルコードは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の検索ボックスに何を入力したらいいのかさえわかりません。私の現在の最良の推測では、これは未使用の関数パラメータのためのある種の指定子なのでしょうか?もし、これが何であるか知っていて、私を助けてくれる人がいれば、それは素晴らしいことです。ありがとうございます。

どのように解決するのですか?

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