[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