web-dev-qa-db-fra.com

Que fait (void) 'nom de variable' au début d'une fonction C?

Je lis cet exemple de code de Fuse:

http://Fuse.sourceforge.net/helloworld.html

Et j'ai du mal à comprendre ce que fait l'extrait de code suivant:

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;

Plus précisément, la chose (void) "nom de variable". Je n'ai jamais vu ce genre de construction dans un programme C auparavant, donc je ne sais même pas quoi mettre dans la boîte de recherche Google. Ma meilleure supposition actuelle est qu'il s'agit d'une sorte de spécificateur pour les paramètres de fonction inutilisés? Si quelqu'un sait ce que c'est et pourrait m'aider, ce serait formidable. Merci!

53
fyhuang

Il fonctionne autour de certains avertissements du compilateur. Certains compilateurs avertissent si vous n'utilisez pas de paramètre de fonction. Dans un tel cas, vous pourriez ne pas avoir délibérément utilisé ce paramètre, ne pas être en mesure de modifier l'interface pour une raison quelconque, mais toujours vouloir fermer l'avertissement. Cette (void) la construction de casting est un no-op qui fait disparaître l'avertissement. Voici un exemple simple utilisant clang:

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

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

Construisez en utilisant le -Wunused-parameter flag et 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.
89
Carl Norum

Cela ne fait rien, en termes de code.

Il est là pour dire au compilateur que ces variables (dans ce cas, les paramètres) ne sont pas utilisées, pour empêcher le -Wunused avertissements.

Pour ce faire, vous pouvez également utiliser:

#pragma unused
9
Macmade