2012-01-25 14 views
45

¿Cuál es la forma más correcta para volver de la función:regreso de una función void

void function() { 
    // blah some code 
} 

O

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

Justificación de la segunda manera:

  1. Expresa desarrollador intenciones más claramente.
  2. Ayuda a detectar finales función en tiempo de pre-compilación:

Suponga que tiene tal de escenarios tiene montón de funciones y se tiene que inyectar algo de código al final de esas funciones. Pero por alguna razón no desea/no puede modificar tal cantidad de funciones. Qué se puede hacer al respecto ? Return & macro entra en juego, por ejemplo:

#include<stdio.h> 

#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; 
} 
+3

Pregunta interesante, pero hemos votado para cerrar porque es demasiado subjetiva y es probable que cause algún conflicto. Posiblemente mejor para programmers.stackoverflow.com. Recuerde también leer las preguntas frecuentes. –

+4

Es más una cuestión de estilo insertar palabras clave redundantes. – stacker

+0

@stacker - lo que es redundante para una situación, no es para otra ... –

Respuesta

48

Ninguno es más correcto, así que haga su elección. La instrucción return; vacía se proporciona para permitir devolver en una función void desde algún lugar que no sea el final. No hay otra razón por la que yo crea.

+1

Exactamente el propósito por el que voy a usarlo ahora;) – nirvanaswap

22

La primera forma es "más correcto", lo que podría haber intención de expresar? Si el código termina, termina. Eso es bastante claro, en mi opinión.

No entiendo lo que podría ser confuso y necesitar aclaración. Si no se utiliza una construcción de bucle, ¿qué podría pasar, salvo que la función deje de ejecutarse?

estaría gravemente molesto por un sentido return tal declaración adicional al final de una función void, ya que claramente sirve a ningún propósito y me hace sentir el programador original dice "yo estaba confundido acerca de esto, y ahora se puede ¡ser también!" que no es muy agradable

48

La única razón para tener un retorno en una función void sería para salir antes de tiempo debido a alguna sentencia condicional ...

void foo(int y) 
{ 
    if(y == 0) return; 

    // do stuff with y 
} 

como relajarse Dicho esto, cuando termina el código, que termina. No es necesario un retorno explícito al final.

+0

¿qué dice el standerd ** C **? Es legal usar 'return;' en 'void' que devuelve la función. – roottraveller

1

Una vieja pregunta, pero voy a responder de todos modos. La respuesta a la pregunta real es que el retorno simple es redundante y debe dejarse de lado.

Además, el valor sugerido es falsa por la siguiente razón:

if (ret<0) return; 

La redefinición de una palabra C reservada como una macro es una mala idea en la cara de ella, pero esta propuesta en particular es simplemente insoportable, tanto como argumento y como código.

Cuestiones relacionadas