[C con Clase] GOTO

Jorge Medina jorge en bsdchile.cl
Jue Nov 13 02:45:54 CET 2008


2008/11/10 Steven Davidson <srd4121 en njit.edu>:
> Hola David,
>
> David fire wrote:
>>
>> siento dicentir pero no se me ocurre ningun caso en C/C++ o cualquier otro
>> lenguaje de alto nivel que requiera usar GOTO en vez de if for whilke etc...
>
> Sí hay casos que se consideran apropiados usar 'goto', cuando prima la
> claridad de un código fuente que de por sí puede ser complicado. El típico
> ejemplo de esto es el de salir directamente de una serie de bucles anidados.
> Por ejemplo,
>
> for( ... )
> {
>  while( ... )
>  {
>    for( ... )
>    {
>      for( ... )
>      {
>        if( ... )
>        {
>          ...
>          goto salir;
>        }
>      }
>    }
>  }
> }
>
> salir:
> ...

aqui hare una acotacion para cualquier persona que se este iniciando
en el futuro cualquier codigo con mas de 3 niveles de identacion,
deberian empesar a replantearse el problema por que no lo estan
abordando de la mejor forma, y de seguro la solucion mas sucia sera un
goto.

> Obviamente, podríamos usar una variable booleana que sirviese de banderín o
> indicador para salir de todos estos bucles. Sin embargo, complica un poco
> todo este código agregar otro elemento sólo con el propósito de controlar la
> salida de todos los bucles anidados. Por ejemplo,
>
> bool bSalir = false;
>
> for( ... && !bSalir )
> {
>  while( ... && !bSalir )
>  {
>    for( ... && !bSalir )
>    {
>      for( ... && !bSalir )
>      {
>        if( ... )
>        {
>          ...
>          bSalir = true;
>        }
>      }
>    }
>  }
> }
> ...
>
>
> También hay que tener en cuenta que es posible que necesitemos un código de
> muy bajo nivel porque prima la velocidad de ejecución del programa u
> optimización del tamaño del programa ejecutable. La otra razón de tener
> 'goto' es que algunos programas que traducen de ensamblador a C/C++ pueden
> usar 'goto' para indicar los "saltos" a otras instrucciones en el programa.
> Si no tuviéramos 'goto' disponible, el traductor podría tener problemas a la
> hora de elegir la estructura correcta de C/C++ para representar la lógica
> del programa.

goto en ASSEMBLY no es lo mismo que en C/C++ dependera de la version
del compilador si lo implementa asi o no
por lo general seria lo mismo que hacer loop label:

> En general, no usaríamos 'goto', por los peligros que existen y además ya
> tenemos varias otras estructuras ofrecidas por el lenguaje. Sin embargo, es
> útil saber que si necesitamos 'goto', por la razón que sea, lo tendremos a
> mano.
>
>
> Espero haber aclarado un poco el tema.
>
> Steven
>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>

saludos

-- 
Jorge Andrés Medina Oliva.
Evolve or die!




Más información sobre la lista de distribución Cconclase