Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Отлов исключительных ситуаций

8.8K
23 марта 2005 года
Xenofob
23 / / 23.02.2005
Существует ли способ отлавливать ошибки при вызове функций из библиотеки math.h используя конструкцию try{}catch(...){}?
Например:
try{pow(-1,0.5);}
catch(...){ShowMessage("Error!");}
При выполнении этого кода вылетает какое-то другое окошко с ошибкой но в catch(...) программа так и не заходит.
Это из-за того что math.h на чистом си написан что ли? :(
Может можно сделать чтобы прога хотя бы проходила этот фрагмент без выскакивания MessageBox'a?
Заранее спасибо за ответ.
487
24 марта 2005 года
ddnh_bc
301 / / 16.09.2003
Цитата:
Originally posted by Xenofob
Существует ли способ отлавливать ошибки при вызове функций из библиотеки math.h используя конструкцию try{}catch(...){}?
Например:
try{pow(-1,0.5);}
catch(...){ShowMessage("Error!");}
При выполнении этого кода вылетает какое-то другое окошко с ошибкой но в catch(...) программа так и не заходит.
Это из-за того что math.h на чистом си написан что ли? :(
Может можно сделать чтобы прога хотя бы проходила этот фрагмент без выскакивания MessageBox'a?
Заранее спасибо за ответ.



Это происходит потому, что все исключения по умолчанию ловит Борландовое IDE. Запусти прогу не из-под IDE и у тебя все нормально отработает. Чтобы отучить борланд от этой пагубной привычки - идешь в Project Options->C++ и отключаешь Exception handling (так кажется)

8.8K
24 марта 2005 года
Xenofob
23 / / 23.02.2005
Спасибо за отклик, но даже если прогу откомпилировать и запустить без IDE, выскочит сообщение: "pow:DOMAIN error", а не мой "Error!".
8.8K
26 марта 2005 года
Xenofob
23 / / 23.02.2005
Что делать с этим дурацким "DOMAIN error"'ом?
310
26 марта 2005 года
fellow
853 / / 17.03.2003
Цитата:
Originally posted by Xenofob
Что делать с этим дурацким "DOMAIN error"'ом?


Никакой он не дурацкий :) Просто всё дело в том, что исключения, обрабатываемые с помощью try/catch, - это исключения в "С++"-коде. Для перехвата ошибок в "С"-коде (которого до сих пор полным-полно в любой поставке любой С++ системы) нужны другие средства.
Посмотрите справку по функциям С run-time library _matherr и _matherrl.

8.8K
29 марта 2005 года
Xenofob
23 / / 23.02.2005
Цитата:
Originally posted by fellow
Никакой он не дурацкий :) Просто всё дело в том, что исключения, обрабатываемые с помощью try/catch, - это исключения в "С++"-коде. Для перехвата ошибок в "С"-коде (которого до сих пор полным-полно в любой поставке любой С++ системы) нужны другие средства.
Посмотрите справку по функциям С run-time library _matherr и _matherrl.



Благодарю! Это то что мне было нужно.
Определил функцию:

int _matherr(struct _exception *__e)
{
throw Exception("");
}

и все заработало:)

RTFM блин... X)-

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог