Как в си завершить выполняющуюся программу?
exit
abort если завершение аварийное
halt в паскале
* int*) 0) = 0;
dereferencing NULL pointer, будет segmentation fault
И поэтому завершения программы не будет.
Кроме того, вопрос про "си", в этом языке нет таких конструкций.
Ещё: вызов любой библиотечной функции тоже можно перехватить, да и что угодно можно перехватить, если на то пошло.
но согласись, что-то писать в *NULL - не очень хорошо...
потом добавили специальные макросы для этого.
в NT есть специальная функция для показа BSoD. Вообще, такое сообщение об ошибке будет дюже неинформативным
это потому что в винде нет сорсов от ядра и ksymoops'а
> Ещё: вызов любой библиотечной функции тоже можно перехватить
Это уже будет хак, а у хака есть дурная привычка - хаки очень не любят изменения, работу в других условиях и т.д.
try/catch - это стандартная конструкция, которая должна работать на любой платформе.
> Откуда инфа насчёт лёгкости?
Пример:
try
{
* int*) 0) = 0;
}
catch (...)
{
}
куда уж проще...
Заметим, что на x86 это раскрывается в movl $0,0 - т.е. даже регистры не портит.
А для пущей информативности перед этим printk писали какой-нибудь.
а что, какой-нибудь int 3h не прокатит?
закрытость исходников дисциплинирует
На linux и gcc-3.2 такой же, как и без try/catch, что и следовало ожидать.
Ещё бы поганый C++ перехватывал SIGSEGV по своей инициативе.
try
{
* int*) 0) = 0;
throw 1;//против оптимизатора
}
catch (...){}
Например о том, какой код мог бы сгенерировать компилятор для перехвата SIGSEGV, и почему он так не делает.
к примеру
kill(getpidSIGKILL);
//Fortl
те же яйца, но гораздо лучше выглядит
я условно написал getpid - простов названии темы не видно, что хотим завершить текущий процесс...
ИМХО, это проблема реализации языка C++ для юних-а, т.к. увеличивается недерминированность поведение программы в случае ошибки.
имхо при SIGSEGV ни о какой недетерминированности говорить не приходится
что же делать?!?
exit вполне подошел
Я не считаю с и с++ одним языком.
Уважаемые флудерыТы ошибся разделом.
Вот флудеры<flood>Да, они всех реально достали</flood>
Оставить комментарий
vertyal17
Мне казалось можно использовать halt; но оказалось нет такой функции.