fbpx

Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

Operacion en C
 
Avisos
Vaciar todo

Operacion en C

14 Respuestas
6 Usuarios
0 Reactions
5,999 Visitas
qkiyo
Respuestas: 106
Topic starter
(@qkiyo)
Estimable Member
Registrado: hace 18 años

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?

Responder
13 respuestas
heli
Respuestas: 748
 Heli
(@heli)
Ardero
Registrado: hace 19 años

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

Responder
qkiyo
Respuestas: 106
Topic starter
(@qkiyo)
Estimable Member
Registrado: hace 18 años

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!

Responder
ranganok
Respuestas: 3875
(@ranganok)
Ardero
Registrado: hace 19 años

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

Responder
driebes
Respuestas: 39
(@driebes)
Eminent Member
Registrado: hace 19 años

Qkiyo no utilices el GOTO, en C es completamente innecsario, hay soluciones mucho más eficaces.

Responder
isotopo
Respuestas: 113
(@isotopo)
Estimable Member
Registrado: hace 18 años

Cuanto antes te olvides del goto mejor

Programación estructurada

Responder
Página 2 / 3
Compartir: