Autor Tema: Sobre instruccion GOTO en C  (Leído 11308 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Darukur

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 464
    • Informacion, recursos y ejemplos para desarrollos con microcontroladores
Re: Sobre instruccion GOTO en C
« Respuesta #15 en: 06 de Noviembre de 2006, 11:15:03 »
Hola a todo el mundo, he estado fuera y no he podido ponerles un ejemplo respecto al goto en C.
El caso es que el uso de GOTO lo hago por aprovechar al maximo la memoria ROM, como creo que ya dije. El goto, me ahorra memoria ROM del PIC frente al switch. Os adjunto el uso que hago del goto frente al switch.

Ejemplo switch:
Código: [Seleccionar]
switch(b)
{
   case 1:  //instruccion
   break;
   case 2:  //instruccion
   break;
   case 3:  //instruccion
   break;
   case 4:  //instruccion
   break;
   default:  //instruccion
   break;
}


Ejemplo goto:
Código: [Seleccionar]
goto_address(etiqueta_bs+b);
etiqueta_bs:
goto b_1;
goto b_2;
goto b_3;

Este tipo de bloque lo utilizo a lo largo de mi programa muchas veces por lo que me ocupa bastante espacio, y no es posible introducir estos bloques como funcion como habreis pensado algunos, ya que cada vez la instruccion a ejecutar es diferente.
EN resumen, el switch ocupa mas memoria que el goto, supongo que es porque es mas parecido al lenguaje ensamblador.
¿Que opinais respecto a su uso ahora?¿Habria otra opcion mas optimizada que la del goto?

Un saludo y muchas gracias por vuestras respuestas.

Es raro que consuma mucho mas ya que en el caso que presentas (casos numericamente ordenados) el compilador deberia optimizar el switch case como un goto computado.
Es media tonta mi pregunta pero, ¿Estan habilitadas las optimizaciones en el compilador?
Saludos
El que no sabe lo que busca no entiende lo que encuentra.
Mi Pagina Web:  http://www.sistemasembebidos.com.ar
Mi foro:             http://www.sistemasembebidos.com.ar/foro/

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Sobre instruccion GOTO en C
« Respuesta #16 en: 08 de Noviembre de 2006, 15:07:40 »
EN resumen, el switch ocupa mas memoria que el goto, supongo que es porque es mas parecido al lenguaje ensamblador.
¿Que opinais respecto a su uso ahora?¿Habria otra opcion mas optimizada que la del goto?

Arimai el switch debiera funcionar como un "goto computado".  Es decir, que debiera saltar a uno u otro lado de acuerdo al valor de la variable.

Como verás no te hace falta usar el goto, el switch te lo resolvió perfectamente, un punto más a favor de que el goto no es necesario en un lenguaje como C.

Ahora yendo al lado de la optimización del código generado, intervienen muchos factores que hay que tener en cuenta.
Entre los factores, se encuentra tu conocimiento sobre cómo tu compilador trata el código, cómo lo optimiza, etc.  Conociendo esas cosas (que uno trabajando en PC rara o ninguna vez tiene en cuenta) es que podrás llegar a optimizar tu código en C, pero usar el goto no me parece "la salida elegante" a tu problema.

Te propongo, si te parece, que indiques qué compilador usas, en que micro irá alojado el código, cómo es el switch completo (no es lo mismo un switch donde en cada lado enciendas un led o que hagas 400 cosas), ¿Tienes forma de separar cómo es el código generado de ese segmento de código?

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)