开发者

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

开发者 https://www.devze.com 2023-04-03 10:39 出处:网络
This question already has answers here: Why cast an unused function parameter value to void? (2 answers)
This question already has answers here: Why cast an unused function parameter value to void? (2 answers) Closed 5 years ago.

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开发者_如何学Python 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
0

精彩评论

暂无评论...
验证码 换一张
取 消