Я исследовал setjmp / longjmp и обнаружил, что setjmp сохраняет регистры, такие как указатель команд, указатель стека и т. Д.
Однако я не понимаю, что нельзя изменить данные в стеке самого потока между вызовом setjmp и longjmp. В этом случае longjmp не будет работать должным образом.
Чтобы прояснить, например, когда longjmp восстанавливает указатель стека, предположим, что данные в памяти, на которые указывает указатель стека, теперь не такие, как были, когда setjmp был называется. Это может случиться? И если это произойдет, не беда ли мы?
Также то, что имеется в виду под заявлением: «Подпрограммы longjmp () не могут быть вызваны после возврата подпрограммы, которая вызвала подпрограммы setjmp ().»
setjmp()
, должны оставаться в области видимости при вызовеlongjmp()
. - person bk1e   schedule 01.11.2011