What does (void) 'variable name' do at the beginning of a C function? [duplicate]

StackOverflow https://stackoverflow.com/questions/7354786

  •  28-10-2019
  •  | 
  •  

This question already has an answer here:

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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top