Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    214

    [C] warning: control reaches end of non-void function

    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!

  2. #2
    Prova ad aggiungere return; dopo la pthread_exit().
    CrystalSoft | Software House & Web Agency di WinRefine, Mercante in Fiera e altro...
    Annunci Zoo | Annunci gratuiti per il mondo degli Animali
    ElettroMercatino | Annunci a tema Informatico ed Elettronico

  3. #3
    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
    codice:
    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 ).
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    214
    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 Lo prenderò in giro inserendo il return, grazie mille!

  5. #5
    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).

    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.