Что делает (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