Подтвердить что ты не робот

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

4b9b3361

Ответ 1

Он работает с некоторыми предупреждениями компилятора. Некоторые компиляторы будут предупреждать, если вы не используете параметр функции. В таком случае вы могли бы сознательно не использовать этот параметр, не имея возможности поменять интерфейс по какой-то причине, но все же хотите закрыть это предупреждение. Эта конструкция (void) casting is no-op, которая заставляет предупреждение уходить. Вот простой пример использования 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.

Ответ 2

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

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

Другой способ сделать это:

#pragma unused