Мой выход (статус) с setjmp un longjmp

Проблема в том, что мне нужно реализовать свой собственный выход (статус) с помощью setjmp и longjmp. Может быть, кто-то может дать несколько указателей?


person Jānis Gruzis    schedule 03.11.2012    source источник
comment
Что вы пробовали?   -  person Some programmer dude    schedule 03.11.2012
comment
@JoachimPileborg Я ничего не пробовал, поскольку разрешена только реализация с setjmp / longjmp, и я действительно не могу представить, как создать решение из этих функций. Ну, что я сделал, так это искал реализацию выхода в исходниках ядра, но там было много вещей, которые, вероятно, делают то же самое, но другими методами. (точнее я смотрел на _exit())   -  person Jānis Gruzis    schedule 03.11.2012
comment
Вы можете прочитать это: stackoverflow.com/q/1733649/694576   -  person alk    schedule 03.11.2012


Ответы (1)


Единственное решение, о котором я сейчас думаю, это вызвать setjmp в начале main, а затем создать функцию MyExit, которая выполняет longjmp для setjmp в main и выполняет return с некоторым значением (предоставленным из вызова longjmp).

person Some programmer dude    schedule 03.11.2012
comment
Это выглядит как правильное решение, я не заметил, что я могу помещать макросы в основную функцию. Вероятно, это место, где я могу поставить setjmp и управлять возвратом в случае возврата. Спасибо. - person Jānis Gruzis; 03.11.2012
comment
О каких макросах идет речь? - person Barmar; 03.11.2012
comment
Я знаю, что такое макросы, просто не понимаю, какое это имеет отношение к этому вопросу или ответу. setjmp() — это функция (или ее можно рассматривать как таковую). - person Barmar; 03.11.2012
comment
@Barmar Если вы поместите макросы в начало main (который содержит setjmp и другие конструкции), вы можете вернуться к началу с помощью myExit и вернуть ненулевой код, возвращаемый setjmp. Дело в том, что вначале я думал, что должен делать это без макросов. - person Jānis Gruzis; 03.11.2012