Autor Tema: GOTO en C  (Leído 7102 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado IngRandall

  • PIC18
  • ****
  • Mensajes: 383
GOTO en C
« en: 09 de Abril de 2012, 18:34:37 »
Hola, he estado mirando por casualidad y muchas veces dicen que no deben utilizar la función "goto" cuando están programando PIC en C, yo quiero saber el por que no se debe utilizar.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: GOTO en C
« Respuesta #1 en: 09 de Abril de 2012, 18:39:54 »
Es más complicado de entender la secuencia. Seguramente si lo piensas un poco mejor te sale realizarlo sin utilizar el goto  ;-)
No contesto mensajes privados, las consultas en el foro

Desconectado IngRandall

  • PIC18
  • ****
  • Mensajes: 383
Re: GOTO en C
« Respuesta #2 en: 09 de Abril de 2012, 18:43:20 »
Osea, yo no lo utilizo, nunca en C lo he utilizado, solo quiero saber el por que no se debe utilizar, gracias.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: GOTO en C
« Respuesta #3 en: 09 de Abril de 2012, 18:52:01 »
En lenguaje C el Goto es un insulto a los programadores experimentados.
Es un lenguaje tan rico en formas de manejar cada situación, que ir a un goto, que son saltos sin control de retorno, en realidad es una cosa bastante loca.
Nadie dice que no se puede usar, solamente te amenazaran de muerte si lo haces... :D :D :D :D

Para suavizar la cosa, dinos donde usarías un Goto y que intentarías hacer con el y te propondremos al menos dos formas de hacerlo usando las instrucciones de control de interacción con retorno que deberías usar para hacerlo mejor y bien...
« Última modificación: 09 de Abril de 2012, 18:55:24 por MGLSOFT, Razón: suavizado... »
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado IngRandall

  • PIC18
  • ****
  • Mensajes: 383
Re: GOTO en C
« Respuesta #4 en: 09 de Abril de 2012, 18:59:33 »
 :D :D :D Osea como tal se puede, pero no se debe ya que seria "feo" la forma de programacion con esta funcion habiendo tantas maneras tan diferentes de hacerlo y mucho mejores... bien, gracias por la respuesta, salimos de un debate aca en mi trabajo, saludos desde Barranquilla Colombia  ((:-)) ((:-)) ((:-))

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: GOTO en C
« Respuesta #5 en: 09 de Abril de 2012, 19:03:15 »
Claro, si nadie mira tu código todo bien, pero si no que no se sepa quién lo hizo!  :P :D :D
No contesto mensajes privados, las consultas en el foro

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: GOTO en C
« Respuesta #6 en: 09 de Abril de 2012, 19:40:56 »
A la programación con goto se le llama programación spaghetti!. Porque tu codigo queda como un plato de fideos. Y se complica seguir el camino que recorre un fideo.
El problema es básicamente de interpretación. Seguramente te vas a complicar al depurar errores usando goto. Porque el codigo saltará de una parte a otra y de esa a otra y así sucesivamente. Y para controlar donde cometiste un error tenés que estar controlando cada salto dentro de tu programa. Y cuando el codigo se hace bastante extenso es más complicado seguir las iteraciones. etc. etc.
Además en la programación de microncontroladores los labels: deben estar dentro de main. No podés poner labels fuera de main. Y eso hace que el codigo no entre en una sección de memoria. Y no podrás trozarlo como lo harías con funciones.
Así que al menos en los pics prohibido usar el GOTO! ;-)

"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes

Desconectado el_loco

  • PIC10
  • *
  • Mensajes: 17
Re: GOTO en C
« Respuesta #7 en: 09 de Abril de 2012, 21:50:44 »
porque C es un lenguaje estructurado

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: GOTO en C
« Respuesta #8 en: 12 de Abril de 2012, 21:02:21 »
Hola, he estado mirando por casualidad y muchas veces dicen que no deben utilizar la función "goto" cuando están programando PIC en C, yo quiero saber el por que no se debe utilizar.

claro que lo puedes usar!!! si no se pudiera usar, entonces el compilador no lo soportaría.

yo también me tropecé con el dilema del goto en lenguajes estructurados en mis comienzos, y lo que puedo decir (mi opinión personal), es que cuando dejas de pensar en asm, dejas de usar el goto


La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado IngRandall

  • PIC18
  • ****
  • Mensajes: 383
Re: GOTO en C
« Respuesta #9 en: 13 de Abril de 2012, 09:36:59 »
Hola PalitroqueZ, yo no hable de poder si no de deber, son dos cosas distintas.

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: GOTO en C
« Respuesta #10 en: 13 de Abril de 2012, 09:54:05 »
El tema a tener en cuenta al menos en los microcontroladores, es el problema del consumo de segmentos de memoria rom mediante el uso de labels. Como todos los labels deben estar dentro de la función main llega un momento en que no se puede seguir programando. Y llega el error: Memoria rom insuficiente - Out of ROM, A segment or the program is too large.
cito un ejemplo que me ocurrió en carne propia.
http://www.todopic.com.ar/foros/index.php?topic=29379.0
          Saludos.
              Jukinch
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: GOTO en C
« Respuesta #11 en: 13 de Abril de 2012, 19:35:11 »
Hola PalitroqueZ, yo no hable de poder si no de deber, son dos cosas distintas.

ah ok perdón entonces.

una respuesta mas acertada a tu pregunta sería la siguiente,

no debes utilizar el goto en C, puesto que no conoces el concepto de goto en C, esa es la razón de porque "no debes".....

no conocer implica "no deber", si no conoces, "no debes" utilizarlo.

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: GOTO en C
« Respuesta #12 en: 13 de Abril de 2012, 20:49:19 »
no se debe usar porque no es la forma de trabajar con C, pero nada mas.

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: GOTO en C
« Respuesta #13 en: 14 de Abril de 2012, 13:50:33 »
Hola amigos, yo utilizo el GOTO en algunas ocasiones porque lo veo como la mejor alternativa en ese caso particular, igual no creo que esta función sea tan insegura además de ser nativa del C ANSI, un ejemplo: como me recomiendan ustedes resolver la siguiente función sin GOTO:

short final_ciclos()
{
   ciclos_uni_a++;
   if(ciclos_uni_a < 10) {goto   compare;}
   ciclos_uni_a = 0;
   
   ciclos_dec_a++;
   if(ciclos_dec_a < 10) {goto   compare;}
   ciclos_dec_a = 0;
   
   ciclos_cen_a++;
   if(ciclos_cen_a < 10) {goto   compare;}
   ciclos_cen_a = 0;
   
   ciclos_mil_a++;
   if(ciclos_mil_a < 10) {goto   compare;}
   ciclos_mil_a = 0;   
   
   compare:
   
   if(ciclos_mil_a == ciclos_mil && ciclos_cen_a == ciclos_cen &&
      ciclos_dec_a == ciclos_dec && ciclos_uni_a == ciclos_uni) {return(true);}
   else {return(false);}
}

Saludos.

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: GOTO en C
« Respuesta #14 en: 14 de Abril de 2012, 16:39:51 »
facil y sencillo xd

short final_ciclos() {
while(1) {
ciclos_uni_a++;
if(ciclos_uni_a<10) break;
ciclos_uni_a=0;

ciclos_dec_a++;
if(ciclos_dec_a<10) break;
ciclos_dec_a=0;

ciclos_cen_a++;
if(ciclos_cen_a<10) break;
ciclos_cen_a=0;

ciclos_mil_a++;
if(ciclos_mil_a<10) break;
ciclos_mil_a=0;

break;
}

return((ciclos_mil_a == ciclos_mil && ciclos_cen_a == ciclos_cen &&  ciclos_dec_a == ciclos_dec && ciclos_uni_a == ciclos_uni));
}