What does (void) 'variable name' do at the beginning of a C function? [duplicate]
I am reading this sample code from FUSE:
http://fuse.sourceforge.net/helloworld.html
And I am having trouble understanding what the following snippet of code does:
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;
Specifically, the (void) "variable name" thing. I have never seen this kind of construct in a C program before, so I don't even know what to put into the Google search box. My current best guess is that it is some kind of specifier for unused function parameters? If anyone knows what this is and could help me out, that would be great. Thanks!
It works around some compiler warnings. Some compilers will warn if you don't use a function parameter. In such a case, you might have deliberately not used that parameter, not be able to change the interface for some reason, but still want to shut up the warning. That (void)
casting construct is a no-op that makes the warning go away. Here's a simple example using clang:
int f1(int a, int b)
{
(void)b;
return a;
}
int f2(int a, int b)
{
return a;
}
Build using the -Wunused-parameter
flag and 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.
It does nothing, in terms of code.
It's here to tell the compiler that those variables (in that case parameters) are unused, to prevent the -Wunused
warnings.
Another way to do this is to use:
#pragma unused