Форум программистов, компьютерный форум CyberForum.ru

Как работать с try - catch в С++? - C++

Восстановить пароль Регистрация
 
kraborak
1 / 1 / 0
Регистрация: 05.09.2013
Сообщений: 45
13.03.2014, 15:59     Как работать с try - catch в С++? #1
Доброго времени суток. Подскажите плиз как именно работает try catch? Я попробовал сделать вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void f1() {
    int i = 5;
    int j = 0;
    int a = i/j; //вот она - непредвиденная ошибка
}
 
void f2() {
    f1();
}
 
void f3() {
    f2();
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    try {
        f3();
 
    } catch(...) { //как вариант - обрабатываем ВСЕ ошибки
        printf("Exception! Other!!!\n");
    }
}
и нарвался на ошибку т.е. catch не работает.

Насколько я понял из танцев с бубном и изучением различной литературы чтобы сработал catch необходимо в строке, в которой может произойти ошибка, бросить throw. Конкретно в этом примере если в ф-ции f3 ДО вызова ф-ции f2 написать throw 1; и обработку catch(int i) тогда все отлавливается нормально.

Теперь непосредственно вопрос. Существует ли возможность отлова ошибки без throw (я в каком-то блоке НЕ жду ошибки считая что блок надежен но из-за фазы луны и среднестатистической температуры на марсе она все же вылетает и нужно ее отловить) как это сделано в Delphi?

Delphi
1
2
3
4
5
try begin
i = 5/0;
end except begin
print("Ошибка!");
end;
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
13.03.2014, 16:03     Как работать с try - catch в С++? #2
Потому что это не исключительная ситуация
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
13.03.2014, 16:09     Как работать с try - catch в С++? #3
Цитата Сообщение от Croessmah Посмотреть сообщение
Потому что это не исключительная ситуация
Почему же. Вот что выдаёт отладчик:
Необработанное исключение в "0x004114f0" в "06 try catch.exe": 0xC0000094: Integer division by zero.
castaway
Эксперт С++
4838 / 2977 / 367
Регистрация: 10.11.2010
Сообщений: 11,009
Записей в блоге: 10
Завершенные тесты: 1
13.03.2014, 16:23     Как работать с try - catch в С++? #4
Отладчик - это отладчик. В C++ деление на ноль не является исключением.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
13.03.2014, 16:26     Как работать с try - catch в С++? #5
Цитата Сообщение от John Prick Посмотреть сообщение
Вот что выдаёт отладчик:
SEH исключение, каким боком тут исключения C++?

Добавлено через 2 минуты
Цитата Сообщение от kraborak Посмотреть сообщение
Существует ли возможность отлова ошибки без throw
для VC++ http://www.avprog.narod.ru/progs/exceptions.htm и смотрите в сторону EXCEPTION_INT_DIVIDE_BY_ZERO, но лучше всё-таки работать стандартными средствами в данном случае, имхо.
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
13.03.2014, 16:31     Как работать с try - catch в С++? #6
вам бы надо сделать какой-нить class Error , и вызывать его по исключению

C++
1
2
3
4
5
6
7
8
9
int f1() 
{
int i = 5; 
int j = 0; 
if (j==0)
throw Error();  //вот она - непредвиденная ошибка 
else
return  i/j;
}
дальше уже
C++
1
2
3
4
catch(Error &asd)
{
cout<<"Error! j = 0 !";
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2014, 17:47     Как работать с try - catch в С++?
Еще ссылки по теме:

C++ Разъясните подробно, как работают Try-catch
C++ Как работать с указателями и как работать с ссылками
Try-catch C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
kraborak
1 / 1 / 0
Регистрация: 05.09.2013
Сообщений: 45
13.03.2014, 17:47  [ТС]     Как работать с try - catch в С++? #7
dzrkot, да, все верно НО я спрашивал немного про другое =) Нельзя ли сделать это без throw т.е. не проверяя все возможные или невозможные варианты в каждой строчке кода а просто обернуть небезопасный блок строк конструкцией try catch (в delphi try except)?

Добавлено через 11 минут
dzrkot, спасибо, это годится) Вариант:
C++
1
2
3
4
5
6
7
__try {
        f3();
 
    } 
    __except(EXCEPTION_EXECUTE_HANDLER) {
        printf("ERROR!!!\n");
    }
работает примерно как нужно НО... VC++ и #include <windows.h> немножечко напрягает

Добавлено через 48 секунд
ех сори, это Croessmah, подсказал =)
Yandex
Объявления
13.03.2014, 17:47     Как работать с try - catch в С++?
Ответ Создать тему
Опции темы

Текущее время: 23:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru