(void)'变量名'在C函数的开头做了什么?

fyh*_*ang 55 c fuse

我正在从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;
Run Code Online (Sandbox Code Playgroud)

具体来说,(void)"变量名"的东西.我以前从未在C程序中看到过这种结构,所以我甚至不知道要在Google搜索框中添加什么.我目前最好的猜测是它是未使用的函数参数的某种说明符?如果有人知道这是什么,可以帮助我,那将是伟大的.谢谢!

Car*_*rum 91

它适用于一些编译器警告.如果您不使用函数参数,某些编译器会发出警告.在这种情况下,您可能故意不使用该参数,由于某种原因无法更改接口,但仍希望关闭警告.那个(void)构造构造是一个禁止操作,使警告消失.这是一个使用clang的简单示例:

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

int f2(int a, int b)
{
  return a;
}
Run Code Online (Sandbox Code Playgroud)

使用-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.
Run Code Online (Sandbox Code Playgroud)

  • 使用`#define IGNORE_UNUSED(var)(void)(var)`然后呢? (3认同)
  • 例子+1 :) (2认同)

Mac*_*ade 8

就代码而言,它什么都不做.

这是告诉编译器这些变量(在这种情况下是参数)未使用,以防止-Wunused警告.

另一种方法是使用:

#pragma unused
Run Code Online (Sandbox Code Playgroud)