Пока Дейкстра ругался на оператор goto (1968), Martin Richards изобрёл (в языке BCPL, 1967) механизм нелокальных переходов longjmp. Кен Томпсон и Деннис Ритчи встроили это дело сначала в язык Би, потом в Си. Идея прижилась, позже превратившись в try/catch в Си++.
Нелокальные переходы штука полезная в умелых руках. Иногда без неё не обойтись. Там есть куча подводных камней. Мне когда-то приходилось реализовывать setjmp/longjmp на разных архитектурах. Уже подзабылось маленько. Может кто и описал это дело в книжках, но где ж те книжки отыщешь. Благо имеем ИИ, можно спросить.
Вот статья с хорошим изложением темы от Клода: "Non-Local Jumps in C: Understanding setjmp and longjmp"
Целевая аудитория: программисты на C, знакомые с функциями, указателями и стеком вызовов, но ещё не сталкивавшиеся с нелокальным управлением потоком выполнения.
Цель: сформировать чёткое представление о том, как работают setjmp/longjmp, когда их следует использовать и — что не менее важно — когда их следует избегать.
Нелокальные переходы штука полезная в умелых руках. Иногда без неё не обойтись. Там есть куча подводных камней. Мне когда-то приходилось реализовывать setjmp/longjmp на разных архитектурах. Уже подзабылось маленько. Может кто и описал это дело в книжках, но где ж те книжки отыщешь. Благо имеем ИИ, можно спросить.
Вот статья с хорошим изложением темы от Клода: "Non-Local Jumps in C: Understanding setjmp and longjmp"
Целевая аудитория: программисты на C, знакомые с функциями, указателями и стеком вызовов, но ещё не сталкивавшиеся с нелокальным управлением потоком выполнения.
Цель: сформировать чёткое представление о том, как работают setjmp/longjmp, когда их следует использовать и — что не менее важно — когда их следует избегать.
