LINUX.ORG.RU

проблема с exception handling


0

0

Hello All!

Возникла проблема.
Необходимо перехватить исключение в программе на С++ при помощи
конструкции try - catch.

int a,b,c;
try
{
a=5;
b=0;
c=a/b;
}
catch(...)
{
printf("My exception\n");
}

Собираю под виндой - все ок, выводит My exception.
Собираю под Линухом - все собирается нормально, но перехват не происходит. Выводит "Floating point exception".

Где грабли????

Заранее спасибо.

anonymous

В твоем коде не бросаются исключения, с чего бы они должны ловиться.

А то, что MSVC делает несколько странный код - так это проблема MS, а не GCC. :)

Murr ★★
()

>Hello All! > >Возникла проблема. >Необходимо перехватить исключение в программе на С++ при помощи >конструкции try - catch. > >int a,b,c; >try >{ >a=5; >b=0; >c=a/b; >} >catch(...) >{ >printf("My exception\n"); >} > >Собираю под виндой - все ок, выводит My exception. >Собираю под Линухом - все собирается нормально, но перехват не >происходит. Выводит "Floating point exception". > >Где грабли????

Грабли в том, что надо читать книжки по C++, прежде чем что-либо писать.

В соответствие со стандартом C++. Надо сделать throw чтобы потом что-нибудь поймать. Если компиляторы виндовских IDE типа C++Builder или VC++ добавляют нестандартные расширения, это не значит, что все остальные должны делать так же.

anonymous
()

>Где грабли????

В виндовс SEH как таковой это часть ядра и к ++ SEH имеет параллельное отношение (он там и в C работает)

А ++ SEH в том же самом виндовсе обычно использует эту возможность.

В *NIX вместо встроенного в ядро SEH имеет место быть Signal API - хочешь чтобы было "как в виндовс" пиши враппер.

sS ★★★★★
()
Ответ на: комментарий от anonymous

В соотвествие со стандартом C++....
try {} catch () {} и должен срабатывать на исключения типа деления на 0 и другие ошибки. Если это не происходит, но
1. Нах... такой компилятор
2. Нах... такой обработчик, который них... не обрабатывает
3. Опции в GCC случайно посвященной обработке исключений нет? А то по-умолчанию try {} catch (...) {} как бы и игнорироваться может

anonymous
()
Ответ на: комментарий от Murr

Самое смешное, что действительно в стандарте о последствиях деления на 0 ничего я не нашел. Соотвественно выбрасывание или не выбрасывание throw ложится либо на ОС (SEH в Windows) либо на особенности компилятора. Но вообще то бесит, что try - catch есть, а работает не всегда.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.