[C con Clase] GOTO

Steven Davidson srd4121 en njit.edu
Lun Nov 10 07:13:59 CET 2008


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:
...

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.

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





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