Ritorno da una funzione di vuoto

Qual è il modo più corretto per tornare dalla funzione:

void function() { // blah some code } 

O

 void function() { // blah some code return; } 

Motivazioni per la seconda strada:

  1. Esprime le intenzioni degli sviluppatori in modo più chiaro.
  2. Aiuta a rilevare la fine della funzione in fase di pre-compilazione:

Supponiamo che tu abbia uno scenario simile: hai un sacco di funzioni e devi inserire del codice alla fine di quelle funzioni. Ma per alcuni motivi non vuoi / o non puoi modificare una tale quantità di funzioni. Cosa puoi fare a riguardo? Return e la macro entrano in gioco, ad esempio:

 #include #define MAX_LINES 1000 #define XCAT(a,b) a##b #define CAT(a,b) XCAT(a,b) #define return returns[__LINE__] = 1;\ if (returns[__LINE__])\ {printf("End of function on %d line.\n",__LINE__);}\ int CAT(tmp,__LINE__); \ if ((CAT(tmp,__LINE__)=returns[__LINE__], returns[__LINE__] = 0, CAT(tmp,__LINE__)))\ return static int returns[MAX_LINES]; void function1(void) { return; } void function2(void) { return; } int main() { function1(); function2(); return 0; } 

Né è più corretto, quindi fate la vostra scelta. Il return; vuoto return; la dichiarazione è fornita per permettere un ritorno in una funzione di void da un luogo diverso dalla fine. Non ho altre ragioni per cui credo.

L’unica ragione per avere un ritorno in una funzione nulle sarebbe uscire presto a causa di alcune affermazioni condizionali …

 void foo(int y) { if(y == 0) return; // do stuff with y } 

Come si dice, quando il codice finisce, finisce. Non è necessario un ritorno esplicito alla fine.

Il primo modo è “più corretto”, quale intenzione potrebbe esserci per esprimere? Se il codice finisce, finisce. Questo è abbastanza chiaro, secondo me.

Non capisco cosa possa essere fonte di confusione e bisogno di chiarimenti. Se non viene utilizzato alcun costrutto di ciclo, cosa potrebbe accadere se non che la funzione smette di funzionare?

Sarei seriamente infastidito da una dichiarazione di return extra inutile alla fine di una funzione di void , dal momento che chiaramente non ha alcuno scopo e mi fa solo sentire che il programmatore originale ha detto “Ero confuso su questo, e ora puoi esserlo anche tu!” che non è molto bello

Una vecchia domanda, ma risponderò comunque. La risposta alla domanda reale è che il semplice ritorno è ridondante e dovrebbe essere omesso.

Inoltre, il valore suggerito è falso per il seguente motivo:

 if (ret<0) return; 

Ridefinire una parola riservata C come una macro è una ctriggers idea a prima vista, ma questo particolare suggerimento è semplicemente insopportabile, sia come argomento che come codice.