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?
Hola Qkiyo,
Eso que quieres hacer se puede hacer con la instruccion GOTO, pero en C es una opci'on nada recomendada porque hace el código difícil de leer y en los procesadores modernos hace que el código sea más lento (debido a que no funciona el sistema de predicción de saltos).
Así que te propongo que investigues sobre las instrucción BREAK, que es lo mas aproximado a lo que tu buscas.int i=0;
while(1){ --bucle infinito
i+=1;
if i==6
break; -- sale del bucle infinito cuando "i" vale 6
}
Tambien puedes replantearte hacer de otra forma el bucle o siempre puedes utilizar funciones, y cuando quieras salir de la función usas un RETURNvoid mifuncion(int numero){
while(1){ --bucle infinito
numero+=1;
if numero==6
return; -- sale de la función cuando "i" vale 6
}
void main(){
int i=0;
mifuncion(i);
}
Espero que te sirvan estas indicaciones
Un saludo.
Gracias joviwap;) . Creo que podría servirme la instruccion RETURN, la funcion que hace es parecida a la de un BREAK dentro de un SWITCH no?
Hola, Qkiyo, como dice joviwap aunque existen las etiquetas en C y la función "goto" no es recomedable usarlas, es mejor intentar otra solución y dejar el goto para casos "de emergencia". Creo que yo solo he usado el goto en dos ocasiones, y llevo escritas varios miles de líneas de código en C.
Puedes usar un bucle infinito y dentro el "continue" que lo que queda de bucle y comienza desde el principio, el "break" que termina el bucle ya mismo pero continua con el resto de la funcion o el "return" que termina la funcion en ese punto.
Para el ejemplo que pones puedes hacerlo así:
funcion ()
{
while (1) // bucle infinito
{
if (condicion1){ /* hago algo aquí */}
if (condición2) { continue; /* salta al comienzo del bucle otra vez*/}
if (condicion3) {/* hago otra cosa aquí*/}
if (condicion4) {/* hago otra cosa más */}
if (condicion5) {break; /* termina el bucle y continua con la función */}
if (condicion6) {/* hago otra cosa aquí*/}
if (condicion7) {return; /* sale de la función ya mismo sin continuar */
}
/* continua la funcion haciendo cosas */
/* hace más cosas */
}
En cuanto a retornar varios valores NO es posible. Pero si usas punteros a variables es posible que una función modifique varios valores. También se puenen agrupar las variables en arrays o estructuras y pasar a la función el puntero a esas variables.
void funcion (int *d1, *d2, *d3)
{
*d1 = 5;
*d2 = 6;
*d3 = 7;
}
main ()
{
int dato1, dato2, dato3;
dato1=1;
dato2=2;
dato3=3;
/* hasta aquí está claro ¿no? */
función (&dato1, &dato2, &dato3);
/* he llamado a función y le he dicho donde están dato1, 2 y 3 */
/* mediante el símbolo & que indica "la dirección de" */
/* ahora dato1 = 5, dato2 = 6 y dato3 = 7 */
/* la función no ha retornado nada pero ha cambiado 3 variables */
/* pese a que son locales a main */
}
Cuando se familiariza uno con "punteros a" * y "direcciones de" & se consiguen cosas muy interesantes.
Aahh vale, vale, ya lo habia visto en C++ pero ni me acordaba de como se hacia..ni para que servía * y & . Lo malo es lo de las etiquetas...se me va a complicar un poco la historia, xke no es cuestion se salir de la función..sino de saltar a una determinada linea, aki es donde veo una gran desventaja de C respecto del ensamblador..
Bueno, muchas gracias x dedicarm vuestro tiempo 😉 SaLu2!!