Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Wenas!
Tengo una dudilla sobre una operación en C. Se que en lenguaje ensamblador se puede crear "etiquetas" y en cualquier momento de un programa acudir a ellas, parecido a las funciones. Pero, ¿como se puede hacer en C una de esas "etiquetas" y saltar a esa linea cuando yo quiera?
Por ejemplo:
CODIGO; <- Esta seria la etiqueta
if (....lo k sea)
if (....lo k sea)
if (....lo k sea)
"salta a la etiketa CODIGO"
El motivo es por poder salir de una serie de condiciones, que si se han cumplido, pues salte a otra parte de mi programa (pero no que salte a una funcion). No se si ha kedado klara mi duda... Alguien se le ocurre algo??
Muxas gracias!y SaLu2!!
PD: Ah! y otra duda, se como hacer que una funcion devuelva un dato, una variable, pero ¿como hacer para que devuelva 4 valores por ejemplo?
Bueeeeeno, si te pones así mejor usa goto. Estas advertido de que no es una buena idea, el programa se entenderá mal y puede ser muy dificil de depurar si algo no esta bien.
NO te permite saltar fuera de una función, solo puedes utilizar lo en el interior de la función donde defines las etiquetas (es normal, quedarían datos en la pila si se sale de la función con un goto y no con un return, en ensamblador pasría lo mismo).
funcion ()
{
int dato1=0;
dato1=3;
dato1++;
ETIQUETA: // defino una etiqueta llamada "ETIQUETA"
dato1++;
while (dato1!=9)
{
// codigo de relleno, hago cosas
// hago mas cosas
if (dato1==5) {dato=1;} // hago mas cosas
dato++;
if (dato1==4) goto ETIQUETA; // salto a la etiqueta llamada "ETIQUETA"
}
dato1=2;
dato1=dato1+33;
}
Existen, además, otras dos formas de saltar a etiquetas en C, pero estas no te las recomiendo en absoluto porque podrían convertir tu programa en un caos.
Una es setjmp() y otra longjmp(). La primera función define la etiqueta y la segunda salta a ella, sin limitación de ningún tipo, al interior o fuera de cualquier función. Essta función es "segura", se encarga de restaurar la pila para evitar que queden valores perdidos.
Estas dos son específicas del CCS: label_address() y goto_address(). La primera obtiene una dirección de una etiqueta y la segunda salta a ella.
NO es segura, si saltas fuera de una función dejarás valores abandonados en la pila y se corromperá.
Estas no las explico porque NO es recomendable usarlas a no ser que seas un artista del C.
Me has tocado la moral con lo de que el C tiene desventajas respecto al ensamblador!!!
Jajaja siento tocar la moral de algunos... Aunque yo uso C, ni se me ocurre tocar ensamblador (sin ofender a los que lo usan XD). Usare el GOTO, es justo lo que necesito..a ver los resultados. Gracias heli!
Como me dijo un profe de programación una vez (yo venía de Basic), si usas un GOTO en C es que estas haciendo mal el programa.
Seguramente hay más de una opción para hacer lo que quieres sin tener que usar GOTO (whiles, funciones, ifs, ...)
Por cierto un BREAK dentro de un WHILE también es bastante feo.
S2
Ranganok Schahzaman
Qkiyo no utilices el GOTO, en C es completamente innecsario, hay soluciones mucho más eficaces.