Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Blaster en 28 Junio 2013, 03:31 am



Título: Duda en una condición con return
Publicado por: Blaster en 28 Junio 2013, 03:31 am
Mi duda esta en la linea indicada que pasa cuando se cumple la condicion y se ejecuta
la linea indicada, como ven es una funcion que no retorna ningun valor.

Código
  1. void clear_all_latency_tracing(struct task_struct *p)
  2. {
  3. unsigned long flags;
  4.  
  5. if (!latencytop_enabled)
  6. return; //<==
  7.  
  8. raw_spin_lock_irqsave(&latency_lock, flags);
  9. memset(&p->latency_record, 0, sizeof(p->latency_record));
  10. p->latency_record_count = 0;
  11. raw_spin_unlock_irqrestore(&latency_lock, flags);
  12. }


Título: Re: Duda en una condición con return
Publicado por: pacoperico en 28 Junio 2013, 03:45 am
El return interrumpe la ejecucion de la funcion y pasa el control a donde se haya invocado la funcion. De forma opcional una sentencia return puede devolver una expresion. No hay ningun tipo de conflicto por usar una sentencia return en una funcion de tipo void.


Título: Re: Duda en una condición con return
Publicado por: engel lex en 28 Junio 2013, 03:59 am
como es una funcion de tipo void, no responde nada ni necesita un valor para pasar ("void" en inglés es "vacío")


Título: Re: Duda en una condición con return
Publicado por: Blaster en 28 Junio 2013, 04:02 am
Agradezco las respuestas pero creo que ya logre entenderlo, con esto forzamos a una funcion de tipo void a que no termine mientras que la condicion no se cumpla al ser asi fuerza la salida de la funcion y vuelve a la instruccion que la invoco.



Título: Re: Duda en una condición con return
Publicado por: satu en 28 Junio 2013, 11:06 am
Buenas!!

Eso es lo que hace, aunque no me gusta eso de meter returns, prefiero esto:
Código
  1. void clear_all_latency_tracing(struct task_struct *p) {
  2.    unsigned long flags;
  3.  
  4.    if (latencytop_enabled) {
  5.        raw_spin_lock_irqsave(&latency_lock, flags);
  6.        memset(&p->latency_record, 0, sizeof(p->latency_record));
  7.        p->latency_record_count = 0;
  8.        raw_spin_unlock_irqrestore(&latency_lock, flags);
  9.    }
  10. }

Llamadme maniático....  :silbar::silbar: jeje

Saludos


Título: Re: Duda en una condición con return
Publicado por: eferion en 28 Junio 2013, 11:15 am
Hombre, eliminar returns intermedios siempre es una buena opción como norma general... ya que es fácil si no saltarse alguna tarea a realizar antes de salir... como liberar memoria.

Código
  1. void func( int numero )
  2. {
  3.  char* buffer = new buffer[ 10 ];
  4.  
  5.  // ...
  6.  
  7.  if ( numero < 0 )
  8.    return;
  9.  
  10. // ...
  11.  
  12.  delete buffer;
  13. }

Ejemplos similares a este me he encontrado a patadas.

No obstante también digo que funciones con muchos niveles, si con returns mejora muchísimo la claridad... ahí me pienso si poner o no returns :)


Título: Re: Duda en una condición con return
Publicado por: amchacon en 28 Junio 2013, 11:21 am
A mí me gustan los returns, una forma fácil y eficiente de acabar una función.

Solo tienes que tener cuidado de liberar la memoria  ;)


Título: Re: Duda en una condición con return
Publicado por: satu en 28 Junio 2013, 11:23 am
Buenas!!

Claro, si para gustos....

El caso es que de ambos modos está bien, es cuestión de manías o necesidades jeje

Saludetes


Título: Re: Duda en una condición con return
Publicado por: eferion en 28 Junio 2013, 11:38 am
A mí me gustan los returns, una forma fácil y eficiente de acabar una función.

Solo tienes que tener cuidado de liberar la memoria  ;)

Mi caso es un poco extremo... pero en un proyecto como en el que estoy... de 13 millones de líneas de código... y 70 personas picando código... acabas detestando un poco los returns a mitad de función.

No es por el que lo hace... sino por el que luego va a meter mano ahí.

Pero es cierto, es cuestión de gustos.


Título: Re: Duda en una condición con return
Publicado por: amchacon en 28 Junio 2013, 12:29 pm
Mi caso es un poco extremo... pero en un proyecto como en el que estoy... de 13 millones de líneas de código... y 70 personas picando código... acabas detestando un poco los returns a mitad de función.

No es por el que lo hace... sino por el que luego va a meter mano ahí.

Pero es cierto, es cuestión de gustos.
¿Estas desarrollando un linux? Que barbaridad  ;-)

Pues la verdad esque nunca he tenido que trabajar en equipo, aunque en realidad todo se resuelve con unas buenas notaciones.


Título: Re: Duda en una condición con return
Publicado por: eferion en 28 Junio 2013, 12:40 pm
Es una suite de aplicaciones para el sector naval :)

Sobre lo de trabajar en equipo... lo de las notaciones está bien... pero cuando los grupos crecen se complica el asunto hasta niveles insospechados.

Hay mucha diferencia entre tener el control de todo lo que se hace porque eres el único desarrollador a encontrarte en medio de una tormenta con código de todas las formas tamaños y colores.