Code:
static jmp_buf environment;
void testproc (void)
{
longjmp(environment, 1);
}
long do_setjmp (void)
{
return setjmp(environment);
}
long testing (void)
{
long status;
status = setjmp(environment);
// status = do_setjmp();
if (status == 0) {
testproc();
return -1;
}
return status;
}
static jmp_buf environment;
void testproc (void)
{
longjmp(environment, 1);
}
long do_setjmp (void)
{
return setjmp(environment);
}
long testing (void)
{
long status;
status = setjmp(environment);
// status = do_setjmp();
if (status == 0) {
testproc();
return -1;
}
return status;
}
Program pocinje u rutini testing, zove setjmp pa rutinu koja obavezno zove longjmp.
E sad, ako zovem setjmp iz rutine testing, stvar radi. Prvi put, status je nula,
pa se pozove testproc, drugi put je 1, pa vratim status(1).
Ali, ako setjmp uradim sa do_setjmp, kad pozovem testproc i on pozove longjmp,
longjmp se vrati gde treba (u rutinu do_setjmp) ali se onda ta rutina vrati na return -1;
tj iza poziva testproc, a ne na "if (status == 0)"..... zasto?
CYRfree 2.0.5 - ako bi ćirilicu radije čitali kao latinicu.
Serbian Latin & Cyrillic keyboard layout 08.nov.2022 - za QWERTY tastature sa našeg tržišta.
http://users.beotel.net/~gwh/
Serbian Latin & Cyrillic keyboard layout 08.nov.2022 - za QWERTY tastature sa našeg tržišta.
http://users.beotel.net/~gwh/