PDA

Visualizza la versione completa : [C] warning: control reaches end of non-void function


Smoke666
25-01-2013, 11:40
Ciao a tutti, ho il seguente warning che non riesco a risolvere:

control reaches end of non-void function

La funzione in questione è la routine che eseguono dei thread. C'è un solo punto di uscita che chiama pthread_exit(NULL).

Non ho usato return o quant'altro, e non riesco a capire il perchè di quel warning... La firma della funzione è la seguente:

void *threads(void *parametro)

Il programma compila ed esegue correttamente, ma mi piacerebbe capire cosa ho sbagliato nell'uscita della funzione.

Grazie in anticipo!

Emulator ®
25-01-2013, 14:14
Prova ad aggiungere return; dopo la pthread_exit().

MItaly
25-01-2013, 15:16
Il tuo compilatore non sa che la pthread_exit corrisponde al "suicidio" del thread, per cui si aspetta che dopo tale chiamata il flusso dell'esecuzione prosegua, e si lamenta perché arriva alla fine di una funzione non-void (infatti la tua funzione restituisce void *) senza che venga specificato un valore di ritorno.
Per rimuovere il warning ti basta mettere un


return NULL;

alla fine (il valore che effettivamente restituisci non ha importanza, dato che comunque quel codice non viene raggiunto, ma NULL mi pare un buon default per un puntatore :) ).

Smoke666
25-01-2013, 19:19
Non avevo pensato ad inserire il return perchè, essendoci pthread_exit, speravo che il compilatore fosse un minimo intelligente capendo che inserendo una qualunque istruzione dopo questa, non sarebbe mai stata eseguita :D Lo prenderò in giro inserendo il return, grazie mille! :D

MItaly
25-01-2013, 23:24
A priori non può sapere che una funzione non ritorna, anche se in effetti c'è un'estensione di gcc (poi adottata nell'ultima versione dello standard C se non erro) che consente di marcare una funzione come "noreturn" - in tal caso il compilatore sa che la funzione non ritorna ed evita di generare il warning (tra le altre cose).

:ciauz:

Loading