Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

Про линковку и про исключения - C++
1) class method definition - если его поместить в объявлении класса в файле заголовке и включить заголовок в несколько компилируемых cpp, а...

Как перебросить исключение дальше в обработчике исключения? - C++
Допустим, я работаю с сетью и пытаюсь обратиться к некторому хосту и если он не отвечает, то бросается исключение-объект наследник...

Вопрос по ASCII кодов - C++
Я сделал ввод одномерного символьного массива, сделал сортировку, но в выводе мне вывело не символы, (в моем случае англ. алфавит) а их...

Исключения:: вопрос - C++
Прошу консультации по теоретическому вопросу. Фрагмент кода #include <cstdlib> #include <iostream> #include <math.h> #include...

Задача из Страуструпа про исключения - C++
Пожалуйста, помогите с задачкой из книги Страуструпа: 14.12.9. (*1) Имеется int main() { /* … */ } Внесите сюда...

Задать функцию которая возвращает частное деление двух чисел (обработка ошибок - через исключения) - C++
Ребят,срочно нужнатваша помощ.Задать функцию,которая возвращает частное деление двух чисел.Обработку ошибок реализовать через...

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

Вопрос про char - C++
Пожалуйста обьясните доступным языком в чем разница между объявлениями, и какие когда лучше использовать char a; char *c; char b=new...

Вопрос про консоль - C++
День добрый. Я новичок в программировании и пишу консольную программу.Хотелось бы узнать у более опытных товарищей. Как сделать так,...

Вопрос про указатели - C++
char *a = "s"; 1. Выделяется место в памяти 2. В это место записывается s 3. Указателю a приваивают адрес памяти где храниться s ...

вопрос про new из с++ за 21 день - C++
контрольный вопрос: что возвращает оператор new, когда для создания объекта нет достаточно памяти7 Добавлено через 12 минут еще...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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