CHILE
Offline
Jr. Member
Karma: 1
Posts: 93
Arduino rocks
|
 |
« on: February 21, 2011, 09:37:24 pm » |
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
God Member
Karma: 10
Posts: 600
Arduinotarrak
|
 |
« Reply #1 on: February 22, 2011, 01:36:05 am » |
En C se recomienda no usar mucho el goto. Yo he solido emplear alguna vez cuando me interesa salir de bucles anidados: 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
Edison Member
Karma: 22
Posts: 1373
|
 |
« Reply #2 on: February 22, 2011, 02:35:35 am » |
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
|
|
|
|
|
CHILE
Offline
Jr. Member
Karma: 1
Posts: 93
Arduino rocks
|
 |
« Reply #3 on: February 22, 2011, 09:46:24 am » |
Gracias a todos por las respuestas; entonces no puedo hacer algo como lo siguiente??? 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
God Member
Karma: 10
Posts: 600
Arduinotarrak
|
 |
« Reply #4 on: February 22, 2011, 11:56:03 am » |
Hola, creo que sí podrías volver, pero podría resultar muy difícil predecir cómo acabará el programa 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
Newbie
Karma: 1
Posts: 48
Arduino rocks
|
 |
« Reply #5 on: February 22, 2011, 12:02:02 pm » |
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
Jr. Member
Karma: 1
Posts: 93
Arduino rocks
|
 |
« Reply #6 on: February 22, 2011, 12:13:54 pm » |
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
Newbie
Karma: 1
Posts: 48
Arduino rocks
|
 |
« Reply #7 on: February 22, 2011, 12:22:30 pm » |
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: 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
Jr. Member
Karma: 1
Posts: 93
Arduino rocks
|
 |
« Reply #8 on: February 22, 2011, 12:27:08 pm » |
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
Newbie
Karma: 1
Posts: 48
Arduino rocks
|
 |
« Reply #9 on: February 22, 2011, 12:54:13 pm » |
El funcionamiento es el mismo la declares antes del setup() o después.
Saludos, chato_sat
|
|
|
|
|
Logged
|
|
|
|
|
|