[LUG.ro] Dijkstra y sus GOTOs (La ética de Bill Gates)

Horacio horacio9573 en gmail.com
Jue Mayo 31 15:42:02 ART 2012


El día 31 de mayo de 2012 14:05, Horacio <horacio9573 en gmail.com> escribió:
> El día 31 de mayo de 2012 13:22, Ezequiel Garcia
> <elezegarcia en gmail.com> escribió:
>> Ya sé que acá hay gente de LCC y que les dicen que los GOTOs son el
>> demonio encarnado.
>> Lo siento muchachos, les mintieron. El GOTO no tiene nada malo, hay
>> que saber usarlo, nomás.
>
> En esto estamos de acuerdo...

Pero me corrijo... hay una forma de mantener el "Continuation-passing
style" es usando las instrucciones longjmp y setjmp... acá pongo un
ejemplo...

#include <stdio.h>
#include <setjmp.h>
#include <stdlib.h>

void salto( jmp_buf saltimbanqui, int v )
{
   longjmp( saltimbanqui, v );
}

int main()
{
   int valor;
   jmp_buf entorno;

   printf( "longjmp y setjmp son una forma de simular el \'goto\'\n\n" );

   valor = setjmp( entorno );   /* Volveremos aquí */
   if( valor != 0 )
   {
      printf( "Longjmp con el valor: %d\n", valor );
      exit( valor );
   }

   printf( "Vamos a saltar ... \n" );
   salto( entorno, 1 );         /* Salta al momento de setjmp() */

   return 0;
}


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