Что делает (void) "имя переменной" в начале функции C? [дубликат]

этот вопрос уже есть ответ здесь:

Я читаю этот пример кода из 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. Мое текущее лучшее предположение заключается в том, что это какой-то спецификатор для неиспользуемых параметров функции? Если кто знает что это и может мне помочь, это было бы здорово. Спасибо!

2 ответов


он работает вокруг некоторых предупреждений компилятора. Некоторые компиляторы будут предупреждать, если вы не используете параметр функции. В таком случае вы могли намеренно не использовать этот параметр, не иметь возможности изменить интерфейс по какой-либо причине, но все равно хотите закрыть предупреждение. Это (void) casting construct-это no-op, который заставляет предупреждение уйти. Вот простой пример использования clang:

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

int f2(int a, int b)
{
  return a;
}

построить с помощью -Wunused-parameter флаг и вуаля:

$ 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.

Он ничего не делает, с точки зрения кода.

Он здесь, чтобы сообщить компилятору, что эти переменные (в этом случае параметры) не используются, чтобы предотвратить -Wunused предупреждения.

другой способ сделать это-использовать:

#pragma unused