Реализация try/catch(...) на Си
Модератор: Модераторы разделов
-
sergius
- Сообщения: 782
-
Zeus
- Сообщения: 694
Re: Реализация try/catch(...) на Си
Взять С++.
А зачем такой геморой?
А зачем такой геморой?
-
sergius
- Сообщения: 782
-
Zeus
- Сообщения: 694
-
d_n_k
- Сообщения: 636
- ОС: Gentoo GNU/Linux
Re: Реализация try/catch(...) на Си
к функциям добавить еще один параметр - идентификатор исключения. как только нужно сгенерить исхлочение сдалаем return, после возврата из функции проверяешь этот идентификатор, если что - обрабатываешь или опять return.
можно завести таблицу адресов перехода на обработчики исключений: throw - jump на обработчик(только сперва на секцию finalize, если она была).
можно завести таблицу адресов перехода на обработчики исключений: throw - jump на обработчик(только сперва на секцию finalize, если она была).
все сказанное есть имхо...
-
Asgard
- Сообщения: 215
- Статус: North Valfader
Re: Реализация try/catch(...) на Си
реализовывается это довольно просто: man setjmp + man longjmp
-
flook
- Сообщения: 585
- Статус: Просто flook
Re: Реализация try/catch(...) на Си
Маньяки
Сишный заменитель try/catch-а (причем в 10 раз более шустрый), котороый обычно пытаются реализовать:
Сишный заменитель try/catch-а (причем в 10 раз более шустрый), котороый обычно пытаются реализовать:
Код: Выделить всё
{
int err;
err = do_smth_1();
if (err)
goto out;
err = do_smth_2();
if (err)
goto out_rollback1;
...
err = do_smth_N();
if (err)
goto out_rollback_N_1;
err = 0;
out:
do_finally();
return err;
out_rollback_N_1:
rollback_N_1()
out_rollback_N_2:
rollback_N_2();
...
out_rollback_1;
rollback_1();
goto out;
}В каждом из нас спит гений... и с каждым днем все крепче...