Go Down

Topic: Ejemplo 'goto' (Read 4 times) previous topic - next topic

Alcafuz

Hola amigos, antiguamente trabajaba con Picbasic, y en ese lenguaje utilizaba el 'goto' para algunas rutinas, he intentado utilizarlo en arduino pero algo me falla, alguien tiene algun ejemplo brevisimo de como utilizarlo correctamente???(que no sea el del reference obvio), lo que no comprendo es como regresar del goto, en basic utilizaba 'return' para volver al 'lugar'  que sigue al salto del goto.

Gracias!

curro92

#1
Feb 22, 2011, 07:36 am Last Edit: Feb 22, 2011, 07:38 am by curro92 Reason: 1
En C se recomienda no usar mucho el goto. Yo he solido emplear alguna vez cuando me interesa salir de bucles anidados:
Code: [Select]

for(a=0;a<9999;a++)
{
   for(b=0;b< 9999;b++)
  {
      (if(x == 20)
          goto marca1;
  }
}

marca1:;
// continúa el código



No conozco el uso de return más que para volver de una función.


chiva

goto simplemente salta, no creo que guarde la dirección en la pila de llamadas.

De todas maneras, C ya tiene un control de flujo muy bueno que hace innecesario el uso de goto, que puede ser una fuente de problemas muy grande.
Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

Alcafuz

Gracias a todos por las respuestas;
entonces no puedo hacer algo como lo siguiente???

Code: [Select]

for(a=0;a<9999;a++)
{
    for(b=0;b< 9999;b++)
   {
       (if(x == 20)
           goto marca1;
           "linea siguiente"
           //mas codigo
         
   }
}

marca1:;
//codigo marca1
"vuelve a siguiente linea'"


la idea es que una vez ejecutado el trozo de codigo llamado 'marca1', el programa vuelva a la linea siguiente a la que estaba justo antes de que se cumpliera la condicion para el goto.

(espero se entienda)

Saludos!



curro92

Hola,
creo que sí podrías volver, pero podría resultar muy difícil predecir cómo acabará el programa

Code: [Select]

for(a=0;a<9999;a++)
{
    for(b=0;b< 9999;b++)
   {
       (if(x == 20)
           goto marca1;
           marca2:;
           //mas codigo
         
   }
}

marca1:;
//codigo marca1
goto marca2;

Go Up