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;

具体来说,(无效)“变量名”的东西。我以前从未在 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 回答