2010-10-21 20 views
5
static void llist_dtor(void *user, void *element) 
{ 
    (void)user; 
    (void)element; 
    /* Do nothing */ 
} 

È una funzione non operativa? Allora perché il casting è finito? Va bene passare NULL come uno dei suoi parametri?Cosa fa il seguente codice?

risposta

4

Sì, questa è una funzione no-op.

Il lancio è un trucco comune per impedire al compilatore di lamentarsi dei parametri non utilizzati.

14

Questo è davvero un no-op. I cast a (void) sono qui per evitare di ricevere avvertimenti "parametri mai usati" con alcuni compilatori (i cast sono ottimizzati, ma i parametri sono ancora considerati come "usati").

È possibile passare NULL poiché i parametri vengono comunque ignorati.

0

Questo non è opzionale. Come quello che dici al compilatore di ignorare questi due argomenti.

3

Sì, questa è una funzione no-op e le righesono posizionate per evitare l'avviso "parametro non utilizzato". Per gcc, cercare "inutilizzati" nella pagina: http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html

Tuttavia, se si trattasse di C++ invece di C, probabilmente scriverlo po 'diverso come

static void llist_dtor(void * /* user */, void * /* element */) 
{ 
    /* Do nothing */ 
} 

Si noti che i nomi delle variabili sono commentata.

+1

-1, gcc non compilerà il codice C senza nomi di argomenti. (Funziona comunque per C++). –

+0

@Andrew Medico: +1: Grazie per avermi corretto. Principalmente faccio C++ e lì l'ho fatto alcune volte ... Non avrei mai pensato che potesse essere diverso in C. – Arun