» Главная
eXcode.ru » Статьи » С / С++ » Система
» Новости
» Опросы
» Файлы
» Журнал



Пользователей: 0
Гостей: 10





Обработка исключений




Содержание статьи:

1) Введение.
2) Инициирование исключений.
3) Синтаксис перехвата исключений.
4) Многоуровневые исключения и выполнение программы после обработки исключения.

Введение.

Привет всем. Как видите, я сподобился на ещё одну статью по С++. Будет она посвящена исключениям. Нет-нет, не исключениям из правил, а системе управления поведением программы, при возникновении некорректных ситуаций в процессе её [программы] выполнения. Как такие ситуации перехватывались в старом добром С? Просто писали (например):

<table class=code cellpadding=5 align=center width=98% border=1 bordercolor=#3B3B3B><tr><td>

int *ptr;
ptr = ( int * )malloc( 4 );
if( ptr ){
printf(“A-a-a-a-a-a!!!”);
getch();
exit( 0 );
}

</td></tr></table>

Сейчас же, когда программы стали очень большими и навороченными, просто выхода из программы по exit’у не достаточно. Надо хотя бы освободить ресурсы (помимо этого мы можем захотеть сделать что-нибудь ещё). Можно конечно передавать всем функциям, которые у нас есть механизм корректного завершения программы, но есть способ лучше: вызывать функцию наподобие SendMessage, а затем засесть за написание огромного обработчика ВСЕХ возможных исключительных ситуаций. Представляете, какой получится монстр? Правильно мыслите – есть способ ещё лучше! Использование исключений!

Инициирование исключений.

Инициирование осуществляется с помощью секции throw.
<i>
void f( void ) {
throw( 1.1 );
}
</i>
throw могут передаваться любые типы данных: стандартные типы данных, типы данных, определенные пользователем, указатели, перечисления, объекты классов и структур.

Синтаксис перехвата исключений.

Для перехвата исключения необходимо блок, в котором оно возникает поместить в секцию try, а затем поставить несколько секций catch в которых вызванные исключения будут обрабатываться.

<table class=code cellpadding=5 align=center width=98% border=1 bordercolor=#3B3B3B><tr><td>

void f( float f ){
char Number[100];
try{
if( f < 5 )
throw( ( int )1 );
else
throw( 1.1 );
}
catch( int i ){
MessageBox( 0 , _gcvt( i , 9 , Number ) , 0 , 0 );
}
catch( double d ){
MessageBox( 0 , _gcvt( d , 9 , Number ) , 0 , 0 );
}
}

</td></tr></table>

В данном случае у нас две секции catch. В одной обрабатываются исключении с типом int, а в другой с типом double. Если же Вам хочется написать для всех типов один обработчик, то это можно сделать следующим способом:

<table class=code cellpadding=5 align=center width=98% border=1 bordercolor=#3B3B3B><tr><td>

void f( float f ){
char Number[100];
try{
if( f < 5 )
throw( ( int )1 );
else
throw( 1.1 );
}
catch(...){
MessageBox( 0 , 0 , 0 , 0 );
}
}

</td></tr></table>

Многоуровневые исключения и выполнение программы после обработки исключения.

Если в блоке try не было инициировано ни одного исключения, то все обработчики будут проигнорированы и выполнение программы продолжится, если же исключение было вызвано, то выполняется код соответствующего обработчика (из всего списка определённых обработчиков будет выполнен только он), после чего либо продолжится выполнение программы, либо в обработчике будет инициировано новое исключение:

<table class=code cellpadding=5 align=center width=98% border=1 bordercolor=#3B3B3B><tr><td>

void f( float f ){
try{
try{
if( f < 5 )
throw( ( int )1 );
else
throw( 1.1 );
}
catch(...){
MessageBox( 0 , "..." , 0 , 0 );
throw ( NULL );
}
}
catch( int ){
MessageBox( 0 , 0 , 0 , 0 );
}
}

</td></tr></table>

Такая обработка исключений возможна, но я настоятельно рекомендую использовать её как можно реже.

источник savardge.narod.ru
К началу статьи





Добавил: MadvEXДата публикации: 2005-07-09 16:52:14

Рейтинг статьи:3.33 [Голосов 6]Кол-во просмотров: 114628
Оцените статью:

Комментарии читателей

Всего комментариев: 4254

2019-02-17 01:27:28
ArthurNuh
https://clck.ru/FCF9a - радио майк


Интернет магазин уникальных футболок. Мы предлагаем Вам только качественные и уникальные товары. На Ваш выбор толстовки, футболки, головные уборы, чехлы, посуда, аксессуары и вещи для интерьера.
Вы с легкостью сможете подобрать рисунок, который Вам нравится или же сделать свой уникальный с помощью конструктора.
Приобретя товр Вы можете воспользоваться услугами доставки на очень выгодных условиях.

Заходи и заказывай:
[url=http://supermayki-ok.ru]Шапка 3D с помпоном[/url]

2019-02-16 07:47:33
armsxlok
Всем привет! Решил подарить своей девушке [url=http://www.maghit.ru/catalog/naushniki/]беспроводные наушники[/url],
мне кажется ей понравится, прикольные и стильные и не очень дорогие…) Хотя есть еще вариант, [url=http://www.maghit.ru/catalog/umnie_chasi/]умные часы[/url],
тоже хороший вариант, смотрю, думаю…

2019-02-15 20:41:53
ArthurNuh
https://clck.ru/FCF9a - female online store


Интернет магазин уникальных футболок. Мы предлагаем Вам только качественные и уникальные товары. На Ваш выбор толстовки, футболки, головные уборы, чехлы, посуда, аксессуары и вещи для интерьера.
Вы с легкостью сможете подобрать рисунок, который Вам нравится или же сделать свой уникальный с помощью конструктора.
Приобретя товр Вы можете воспользоваться услугами доставки на очень выгодных условиях.

Заходи и заказывай:
[url=http://supermayki-ok.ru]Шорты и брюки[/url]

2019-02-13 13:06:43
tuterloca
Сейчас телефон есть у каждого! А вы в курсе, что можно скачать Туту Ап, в котором есть миллионы бесплатных игр для Айфона и Андроида? Игры вроде покемон Го, Клэш оф Кланс и другие доступны абсолютно бесплатно! Детали на сайте [url=https://tutuap.ru]tutuap.ru[/url]. Скачивайте Туту Ап и наслаждайтесь свободой!

2019-02-13 13:04:01
tuterDrync
Сейчас мобильный есть у каждого! А вы в курсе, что возможно скачать Tutu App, в котором есть тысячи бесплатных приложений для Android и iOS? Игры по типу Pokemon Go, Clash of Clans и другие доступны бесплатно! Детали на сайте [url=https://tutuap.ru]тут[/url]. Скачивайте ТутуАпп и наслаждайтесь свободой!

2019-02-11 04:11:36
Davidtep
п»ї&#1040;&#1085;&#1090;&#1080;&#1074;&#1086;&#1079;&#1088;&#1072;&#1089;&#1090;&#1085;&#1086;&#1081; &#1089;&#1090;&#1080;&#1082; &#1076;&#1083;&#1103; &#1082;&#1086;&#1078;&#1080; &#1083;&#1080;&#1094;&#1072; Maxclinic lifting stick
https://clck.ru/EXx9T
&#1059;&#1085;&#1080;&#1082;&#1072;&#1083;&#1100;&#1085;&#1099;&#1081; &#1083;&#1080;&#1092;&#1090;&#1080;&#1085;&#1075;-&#1089;&#1090;&#1080;&#1082; &#1089; &#1082;&#1086;&#1083;&#1083;&#1072;&#1075;&#1077;&#1085;&#1086;&#1084; &#1086;&#1090; &#1073;&#1088;&#1077;&#1085;&#1076;&#1072; Maxclinic. &#1056;&#1072;&#1079;&#1075;&#1083;&#1072;&#1078;&#1080;&#1074;&#1072;&#1077;&#1090; &#1084;&#1086;&#1088;&#1097;&#1080;&#1085;&#1099; &#1085;&#1072; &#1083;&#1080;&#1094;&#1077; &#1080; &#1096;&#1077;&#1077;, &#1074;&#1086;&#1089;&#1089;&#1090;&#1072;&#1085;&#1072;&#1074;&#1083;&#1080;&#1074;&#1072;&#1077;&#1090; &#1086;&#1073;&#1084;&#1077;&#1085; &#1080; &#1074;&#1099;&#1088;&#1072;&#1073;&#1086;&#1090;&#1082;&#1091; &#1082;&#1086;&#1083;&#1083;&#1072;&#1075;&#1077;&#1085;&#1072;, &#1087;&#1086;&#1076;&#1090;&#1103;&#1075;&#1080;&#1074;&#1072;&#1077;&#1090; &#1082;&#1086;&#1078;&#1091; &#1080; &#1076;&#1077;&#1083;&#1072;&#1077;&#1090; &#1077;&#1077; &#1073;&#1086;&#1083;&#1077;&#1077; &#1091;&#1087;&#1088;&#1091;&#1075;&#1086;&#1081;.



***^

2019-02-10 20:05:49
ArthurNuh
http://bit.do/eHQtF - Badges and charms


Интернет магазин уникальных футболок. Мы предлагаем Вам только качественные и уникальные товары. На Ваш выбор толстовки, футболки, головные уборы, чехлы, посуда, аксессуары и вещи для интерьера.
Вы с легкостью сможете подобрать рисунок, который Вам нравится или же сделать свой уникальный с помощью конструктора.
Приобретя товр Вы можете воспользоваться услугами доставки на очень выгодных условиях.

Заходи и заказывай:
[url=http://supermayki-ok.ru]Шапка[/url]

2019-02-06 06:14:47
Davidtep
https://u.to/k4IzFA Оригинальные немецкие автобаферы Power Guard
Оригинальные немецкие автобаферы Power Guard для защиты ходовой автомобиля. Увеличивают клиренс, спасают подвеску и амортизаторы в экстремальных условиях российских дорог.

***^

2019-02-05 12:04:15
ArthurNuh
[url=https://clck.ru/EtfqU]бумага для печати на футболках[/url]


Интернет магазин уникальных футболок. Мы предлагаем Вам только качественные и уникальные товары. На Ваш выбор толстовки, футболки, головные уборы, чехлы, посуда, аксессуары и вещи для интерьера.
Вы с легкостью сможете подобрать рисунок, который Вам нравится или же сделать свой уникальный с помощью конструктора.
Приобретя товр Вы можете воспользоваться услугами доставки на очень выгодных условиях.

Заходи и заказывай:
[url=http://supermayki-ok.ru]Кепка снепбек с прямым козырьком[/url]

2019-02-03 18:00:08
Davidtep
Чудо-бритва X-TRIM

https://u.to/jYAzFA

Инновационная беспроводная бритва с лазером для идеального контура усов, бороды и бакенбардов. Ей можно брить что угодно и когда угодно - она невероятно компактная и многофункциональная.

***^
Ваше имя: *
Текст записи: *
Имя:

Пароль:



Регистрация

Что вы думаете о девушках -программистах?
Ни разу таких не встречал
24% (89)
Очень любопытное зрелище
10% (36)
Мне все равно
3% (12)
Это очень сексуально!
6% (21)
Я и есть девушка -программист
11% (40)
Уважаю таких
9% (33)
Считаю это бесмысленным
6% (22)
Где бы мне найти такую?
13% (46)
Я их боюсь :)
6% (22)
Считаю, что это нормально
12% (45)

Проголосовало: 366
Несколько перлов из жизни российских компьютерных переводчиков:
These ports are not supported - Эти порты не поддерживаются.
Assign nickname to authority - Дать кличку авторитету.
3-character resource type - Трехбуквенный тип ресурса.
Рейтинг: 0/10 (0)
Посмотреть все анекдоты