2012-04-30 12 views
7

Devo usare pthreat ma non ho bisogno di passare alcun argomento alla funzione. Pertanto, passo NULL alla funzione su pthread_create. Ho 7 pthreads, quindi il compilatore gcc mi avverte che ho 7 parametri non marcati. Come posso definire questi 7 parametri come non utilizzati nella programmazione C? Se non definisco questi parametri come non utilizzati, causerebbe qualche problema? Grazie in anticipo per le risposte.che definisce i parametri inutilizzati in C

void *timer1_function(void * parameter1){ 
//<statement> 
} 

int main(int argc,char *argv[]){ 
    int thread_check1; 
    pthread_t timer1; 
    thread_check1 = pthread_create(&timer1, NULL, timer1_function, NULL); 
    if(thread_check1 !=0){ 
     perror("thread creation failed"); 
     exit(EXIT_FAILURE); 
    } 
while(1){} 
return 0; 
} 
+0

Se non sono utilizzati, ciò implica non vengono fatte operazioni significative a quelle variabili e (per la maggior parte) sono sicuri di cui sbarazzarsi. È un avvertimento, non un errore, quindi * può * essere ignorato. Di solito non è una buona idea * ignorarlo, ma tu * puoi *. – Makoto

+0

@hmjd - C++ lo consente, non C. – MByD

+2

http://stackoverflow.com/q/7090998/168175 – Flexo

risposta

17

si può lanciare il parametro void in questo modo:

void *timer1_function(void * parameter1) { 
    (void) parameter1; // Suppress the warning. 
    // <statement> 
} 
+3

http://stackoverflow.com/a/4851173/168175 ha una forma alternativa che funziona meglio per 'volatile' apparentemente – Flexo

+0

Clever - grazie! –

0

E 'perfettamente bene non si utilizza un parametro nel corpo di una funzione.

Per evitare l'avviso del compilatore (se presenti nell'implementazione), si può fare questo:

void *timer1_function(void * parameter1) 
{ 
    // no operation, will likely be optimized out by the compiler 
    parameter1 = parameter1; 
} 
2

Per impostazione predefinita, GCC non produce questo avvertimento, nemmeno con -Wall. Penso che la soluzione alternativa mostrata in altre domande potrebbe essere necessaria quando non si ha il controllo sull'ambiente, ma se lo si fa, basta rimuovere il flag (-Wunused-parameter).

+0

+1 questa è la soluzione migliore. Questo avvertimento è fondamentalmente idiota. Ogni volta che viene preso l'indirizzo di una funzione, GCC dovrebbe disattivare gli avvisi di "parametro inutilizzato" perché, indipendentemente dal fatto che vengano utilizzati internamente o meno, vengono utilizzati come parte dell'interfaccia richiesta per la funzione. Personalmente direi che la stessa cosa dovrebbe applicarsi anche a tutte le funzioni esterne ... –

+2

@R Ho rilevato un errore nel mio codice alcuni giorni fa grazie a questo avviso. Stavo facendo un refactoring di alcune funzioni e ho digitato 0 invece dell'identificatore per una maschera di bit che è entrata come parametro di funzione. Abilitare -Wextra mi ha permesso di correggere immediatamente un bug sottile che era stato introdotto giorni fa. –

+2

-1: trovo regolarmente bug grazie all'attivazione di questo avviso. –

17

GCC ha una funzione "attributi" che può essere utilizzata per contrassegnare i parametri non utilizzati. Utilizzare

void *timer1_function(__attribute__((unused))void *parameter1) 
1

due tecniche comunemente usate:

1) Omettere il nome del parametro utilizzato:

void *timer1_function(void *) { ... } 

2) commentare il nome del parametro:

void *timer1_function(void * /*parameter1*/) { ... } 

- - Chris