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