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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
#1

Исключения, возврат кодов ошибок, assert и 1 вопрос про исключение. - C++

08.11.2011, 00:46. Просмотров 723. Ответов 3
Метки нет (Все метки)

Как правильно выбирать в какой ситуации применять то, а в какой другое?
Есть, конечно, очевидные ситуации, например, не открывается файл, тогда это исключение.
Но много не очевидных ситуаций. Как выбрать?
А вот если функция просит ввести пользователя и проверяет на корректность ввод, то что функция должна делать при не корректном вводе? Возвратить, допустим, false или выкинуть исключение?
Читал на хабре исключения вс ошибки, но там так все смешали( с учетом комментариев), что уже просто запутываешься в этом.
С assert'ами вообще беда. Ведь assert нужен для нахождения ошибок во время тестирования, а исключения\ошибки во время выполнения, когда уже пользуются конечные пользователи.

И еще вопрос про исключение:
C++
1
2
3
4
5
6
7
try
{
    fun();
}
catch( ... )
{
}
Функция fun() 1 раз отработала и выкинула исключение. Мне надо чтобы после блока catch управление передалось снова в точку вызова fun() либо строчкой выше. Как это сделать? Cпомощью goto? Можно, конечно, цикл сделать, но мне не нравится это решение.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.11.2011, 00:46     Исключения, возврат кодов ошибок, assert и 1 вопрос про исключение.
Посмотрите здесь:
Про линковку и про исключения C++
Как перебросить исключение дальше в обработчике исключения? C++
Вопрос по ASCII кодов C++
C++ Исключения:: вопрос
C++ Задача из Страуструпа про исключения
Задать функцию которая возвращает частное деление двух чисел (обработка ошибок - через исключения) C++
Вопрос про указатели C++
Вопрос про палиндромы C++
C++ Вопрос про outtextxy()
C++ Вопрос про Swich
Вопрос про консоль C++
C++ Вопрос про __function

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
08.11.2011, 01:03     Исключения, возврат кодов ошибок, assert и 1 вопрос про исключение. #2
Chelioss, assert нужен только на этапе разработки. Его используют, чтобы отловить ошибки, которые в итоговом варианте программы произойти не должны никогда (т.е. ошибки, случившиеся по вине программиста). Исключения же используются, наоборот, для ошибок, которые можно назвать ожидаемыми, и которые, скорее всего, происходят по вине пользователя (невалидные входные данные и т.д.). Вообще исключения надо использовать только в том случае, если программа никаким образом не может самостоятельно восстановить работу. Т.е. если пользователя просят ввести путь к файлу с исходными данными, а потом выясняется, что такого файла не существует - это исключение, поскольку программа не в состоянии сама выбрать замену. А вот если, например, программа ожидает какой-нибудь информации от внешнего устройства (например, от какого-либо датчика), а таковая в нужный момент не поступила, сразу паниковать не стоит. Может, устройство не ответило вовремя сейчас, но при последующем запросе всё сработает как надо. Поэтому лучше вернуть последнюю валидную информацию, полученную от устройства, и делать так, скажем 3 раза. И уж если на 4-й раз запрос снова остался без ответа - поднимать панику. Т.е. надо всеми силами стараться восстановиться после ошибки самостоятельно. Исключения на то так и называются, что применяются только в исключительных ситуациях, когда ничего уже поделать нельзя.
Пример - компилятор. Он не паникует при первой же полученной ошибке, он пытается её восстановить и разбирать код дальше. Конечно, это не приведёт к желаемому результату (программа всё равно не скомпилируется), но зато компилятор постарается выдать как можно более полный перечень найденных ошибок. Согласитесь, было бы не удобно, если бы компилятор прекращал работу после первой же встреченной ошибки.
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
08.11.2011, 01:13  [ТС]     Исключения, возврат кодов ошибок, assert и 1 вопрос про исключение. #3
Более менее понял, спасибо.
Цитата Сообщение от Chelioss Посмотреть сообщение
когда уже пользуются конечные пользователи.
Тут, конечно, имелось ввиду, что используются программы конечными пользователями.
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
08.11.2011, 02:50     Исключения, возврат кодов ошибок, assert и 1 вопрос про исключение. #4
Chelioss, а, ну и передача управления обратно - думаю, лучше через цикл. Тут ведь тот же самый принцип, что и в меню на switch'ах, т.е. выбрали пункт, что-то выполнили, и снова предоставили пользователю возможность выбрать действие. Это дело ведь на бесконечном цикле реализуется.
Yandex
Объявления
08.11.2011, 02:50     Исключения, возврат кодов ошибок, assert и 1 вопрос про исключение.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru