Go Down

Topic: Ejemplo 'goto' (Read 4516 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;

chato_sat

Hola,
no sería más fácil crear una función y saltar a ella, en lugar de llamar a goto??

Saludos,
chato_sat

Alcafuz

Entiendo, al parecer se hace mas complicado el uso del goto al no existir un 'retorno' incluido en la propia definición del goto en Arduino.

chato_sat, podrías profundizar un poco en lo de la función?, la verdad es que no se usarlas.

chato_sat

Pues puedes crear una función y llamarla desde cualquier parte del programa. Cuando se llama a una función esta se ejecuta y una vez que termina la función el vuelve el flujo del programa a donde se llamó a la función.

Por ejemplo:
Code: [Select]

for(a=0;a<9999;a++)
{
    for(b=0;b< 9999;b++)
   {
       if(x == 20)
           funcion1();

       //mas codigo
         
   }
}

void funcion1() {
}


cuando se cumple que x==20 se ejecuta lo que haya en funcion1 y cuando termine se seguirá ejecutando el for

Saludos,
chato_sat

Alcafuz

Ok, muchas gracias, si vuelve automaticamente al punto anterior, es justamente lo que busco.

Ahora, he visto que las funciones las definen tanto antes del void setup(), como al final del codigo, da lo mismo? o tiene alguna diferencia en el funcionamiento????

Saludos!

chato_sat

El funcionamiento es el mismo la declares antes del setup() o después.

Saludos,
chato_sat

Go Up