Cosa fa (void) il "nome variabile" all'inizio di una funzione C? [duplicare

StackOverflow https://stackoverflow.com/questions/7354786

  •  28-10-2019
  •  | 
  •  

Domanda

Sto leggendo questo codice di esempio da Fuse:

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

E ho difficoltà a capire cosa fa il seguente frammento di codice:

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;

In particolare, la cosa (vuoto) "Nome variabile". Non ho mai visto questo tipo di costrutto in un programma C prima, quindi non so nemmeno cosa mettere nella casella di ricerca di Google. La mia migliore ipotesi attuale è che si tratta di una sorta di specificatore per i parametri della funzione inutilizzati? Se qualcuno sa cosa è e potrebbe aiutarmi, sarebbe fantastico. Grazie!

È stato utile?

Soluzione

Funziona attorno ad alcuni avvertimenti del compilatore. Alcuni compilatori avverteranno se non usi un parametro di funzione. In tal caso, potresti non aver deliberatamente utilizzato quel parametro, non essere in grado di modificare l'interfaccia per qualche motivo, ma si desidera comunque tacere l'avvertimento. Quella (void) Il costrutto di casting è una no-op che fa sparire l'avvertimento. Ecco un semplice esempio usando Clang:

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

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

Costruisci usando il -Wunused-parameter Flag e 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.

Altri suggerimenti

Non fa nulla, in termini di codice.

È qui per dire al compilatore che quelle variabili (in quel caso parametri) sono inutilizzate, per prevenire il -Wunused avvertimenti.

Un altro modo per farlo è usare:

#pragma unused
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top