我正在阅读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搜索框中添加什么。我目前最好的猜测是它是未使用的函数参数的某种说明符?如果有人知道这是什么,可以帮助我,那将是伟大的。谢谢!
答案 0 :(得分:87)
它适用于某些编译器警告。如果您不使用函数参数,某些编译器会发出警告。在这种情况下,您可能故意不使用该参数,由于某种原因无法更改接口,但仍希望关闭警告。那个(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.
答案 1 :(得分:8)
就代码而言,它什么都不做。
这是告诉编译器这些变量(在这种情况下是参数)未使用,以防止-Wunused
警告。
另一种方法是使用:
#pragma unused