Pages: [1]   Go Down
Author Topic: Ejemplo 'goto'  (Read 2871 times)
0 Members and 1 Guest are viewing this topic.
CHILE
Offline Offline
Jr. Member
**
Karma: 1
Posts: 93
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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!
Logged

Euskadi
Offline Offline
God Member
*****
Karma: 16
Posts: 711
Arduinotarrak
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

En C se recomienda no usar mucho el goto. Yo he solido emplear alguna vez cuando me interesa salir de bucles anidados:
Code:
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.

« Last Edit: February 22, 2011, 01:38:28 am by curro92 » Logged

Offline Offline
Edison Member
*
Karma: 23
Posts: 1375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

CHILE
Offline Offline
Jr. Member
**
Karma: 1
Posts: 93
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code:
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!


Logged

Euskadi
Offline Offline
God Member
*****
Karma: 16
Posts: 711
Arduinotarrak
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code:
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;
Logged

0
Offline Offline
Newbie
*
Karma: 1
Posts: 48
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

CHILE
Offline Offline
Jr. Member
**
Karma: 1
Posts: 93
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

0
Offline Offline
Newbie
*
Karma: 1
Posts: 48
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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
Logged

CHILE
Offline Offline
Jr. Member
**
Karma: 1
Posts: 93
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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!
Logged

0
Offline Offline
Newbie
*
Karma: 1
Posts: 48
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Saludos,
chato_sat
Logged

Pages: [1]   Go Up
Jump to: