[ aleksazr @ 05.09.2010. 18:36 ] @
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; } 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? |