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



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





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




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

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]Кол-во просмотров: 112610
Оцените статью:

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

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

2018-09-14 15:50:49
Serviceafj
Добрый день товарищи[url=http://vika-service.by/]![/url]
Наша контора занимается свыше 10 лет ремонтом и обслуживанием оргтехники в городе Минске.Основные направления и виды нашей деятельности:

1)[url=http://vika-service.by/]Заправка и восстановление картриджей[/url]

2)[url=http://vika-service.by/]Ремонт и сервис оргтехники[/url]

3)[url=http://vika-service.by/]Ремонт и настройка компьютеров и ноутбуков[/url]

4)[url=http://vika-service.by/]SEO продвижение сайтов[/url]

5)[url=http://vika-service.by/]Разработка сайтов[/url]
Всегда рады помочь Вам!С уважением,ЧУП ТЕХНОСЕРВИС ВИКТОРИЯ.

http://timeout.by/user/Servicedqw/
http://www.biz-for-all.dom-mylovarov.ru/user/Servicebuj/
http://www.rusforum.com/member.php?u=754751
http://www.cs-wcs.ru/index/8-45697
http://ekhpayrutyun.ru/index/8-26538

2018-09-14 15:50:48
Serviceqfx
Приветствую Вас господа[url=http://vika-service.by/]![/url]
Наша компания занимается свыше 10 лет ремонтом и обслуживанием оргтехники в городе Минске.Основные направления и виды нашей деятельности:

1)[url=http://vika-service.by/]Заправка и восстановление картриджей[/url]

2)[url=http://vika-service.by/]Ремонт и сервис оргтехники[/url]

3)[url=http://vika-service.by/]Ремонт и настройка компьютеров и ноутбуков[/url]

4)[url=http://vika-service.by/]SEO продвижение сайтов[/url]

5)[url=http://vika-service.by/]Разработка сайтов[/url]
Всегда рады помочь Вам!С уважением,ЧУП ТЕХНОСЕРВИС ВИКТОРИЯ.

http://ultrafreedom.ru/index/8-107051
http://gode-shop.ru/index/8-41218
http://court.uv.gov.mn/user/Servicebtx/
http://zero-clan.xf.cz/profile.php?lookup=4340
http://allbestlib.ru/index/8-15329

2018-09-14 15:50:20
Serviceukz
Доброго времени суток господа[url=http://vika-service.by/]![/url]
Наша компания занимается свыше 10 лет ремонтом и обслуживанием оргтехники в городе Минске.Основные направления и виды нашей деятельности:

1)[url=http://vika-service.by/]Заправка и восстановление картриджей[/url]

2)[url=http://vika-service.by/]Ремонт и сервис оргтехники[/url]

3)[url=http://vika-service.by/]Ремонт и настройка компьютеров и ноутбуков[/url]

4)[url=http://vika-service.by/]SEO продвижение сайтов[/url]

5)[url=http://vika-service.by/]Разработка сайтов[/url]
Всегда рады помочь Вам!С уважением,ЧУП ТЕХНОСЕРВИС ВИКТОРИЯ.

http://muz-now.ru/index/8-24408
http://hexen-game.ru/index/8-30783
http://game.winxplanet.ru/index/8-65723
http://www.maxvk.ru/index/8-8502
http://www.spreadinvest.ru/index/8-18902

2018-09-14 13:41:46
Serviceqlt
Привет господа[url=http://vika-service.by/]![/url]
Наша компания занимается свыше 10 лет ремонтом и обслуживанием оргтехники в городе Минске.Основные направления и виды нашей деятельности:

1)[url=http://vika-service.by/]Заправка и восстановление картриджей[/url]

2)[url=http://vika-service.by/]Ремонт и сервис оргтехники[/url]

3)[url=http://vika-service.by/]Ремонт и настройка компьютеров и ноутбуков[/url]

4)[url=http://vika-service.by/]SEO продвижение сайтов[/url]

5)[url=http://vika-service.by/]Разработка сайтов[/url]
Всегда рады помочь Вам!С уважением,ЧУП ТЕХНОСЕРВИС ВИКТОРИЯ.

http://muzvinegret.ru/index/8-11581
http://chebako.ucoz.lv/index/8-20012
http://isradem.com/index.php?subaction=userinfo&user=Serviceoic
http://lokalatih.bandung.go.id/forum/member.php?2191-Servicebpc
http://paraglide.org.ua/index/8-21696

2018-09-14 13:41:46
Serviceuvr
Привет товарищи[url=http://vika-service.by/]![/url]
Наша фирма занимается свыше 10 лет ремонтом и обслуживанием оргтехники в городе Минске.Основные направления и виды нашей деятельности:

1)[url=http://vika-service.by/]Заправка и восстановление картриджей[/url]

2)[url=http://vika-service.by/]Ремонт и сервис оргтехники[/url]

3)[url=http://vika-service.by/]Ремонт и настройка компьютеров и ноутбуков[/url]

4)[url=http://vika-service.by/]SEO продвижение сайтов[/url]

5)[url=http://vika-service.by/]Разработка сайтов[/url]
Всегда рады помочь Вам!С уважением,ЧУП ТЕХНОСЕРВИС ВИКТОРИЯ.

http://speckarlib.kz/user/Evroavvxr/
http://forum.parfenov.ru/index.php?action=profile;u=6152
http://kfaktiv.ru/user/Servicefpt/
http://zawagnesaa.com/vb4/member.php?u=627
http://dancesport.kz/user/Servicelvl/

2018-09-14 13:41:03
Serviceyus
Доброго времени суток господа[url=http://vika-service.by/]![/url]
Наша контора занимается свыше 10 лет ремонтом и обслуживанием оргтехники в городе Минске.Основные направления и виды нашей деятельности:

1)[url=http://vika-service.by/]Заправка и восстановление картриджей[/url]

2)[url=http://vika-service.by/]Ремонт и сервис оргтехники[/url]

3)[url=http://vika-service.by/]Ремонт и настройка компьютеров и ноутбуков[/url]

4)[url=http://vika-service.by/]SEO продвижение сайтов[/url]

5)[url=http://vika-service.by/]Разработка сайтов[/url]
Всегда рады помочь Вам!С уважением,ЧУП ТЕХНОСЕРВИС ВИКТОРИЯ.

http://softwarerus.ru/index/8-27090
http://freecasinorus.com/forum/profile.php?id=83244
http://betfred88.net/forum/profile.php?id=33550
http://forum.santafox.ru/index.php?action=profile;u=213221
http://www.245msp.ru/index/8-25947

2018-09-13 19:31:56
Serviceknc
Здравствуйте друзья[url=http://vika-service.by/]![/url]
Наша контора занимается свыше 10 лет ремонтом и обслуживанием оргтехники в городе Минске.Основные направления и виды нашей деятельности:

1)[url=http://vika-service.by/]Заправка и восстановление картриджей[/url]

2)[url=http://vika-service.by/]Ремонт и сервис оргтехники[/url]

3)[url=http://vika-service.by/]Ремонт и настройка компьютеров и ноутбуков[/url]

4)[url=http://vika-service.by/]SEO продвижение сайтов[/url]

5)[url=http://vika-service.by/]Разработка сайтов[/url]
Всегда рады помочь Вам!С уважением,ЧУП ТЕХНОСЕРВИС ВИКТОРИЯ.

http://chuts.ru/user/Servicefxp/
http://www.vtestdrive.ru/index/8-44464
http://mp3la.com/article/user/Evroavmvy/
http://club.rybnoe.net/index/8-7919
http://ekhpayrutyun.ru/index/8-39626

2018-09-13 19:31:55
Serviceprg
Привет друзья[url=http://vika-service.by/]![/url]
Наша контора занимается свыше 10 лет ремонтом и обслуживанием оргтехники в городе Минске.Основные направления и виды нашей деятельности:

1)[url=http://vika-service.by/]Заправка и восстановление картриджей[/url]

2)[url=http://vika-service.by/]Ремонт и сервис оргтехники[/url]

3)[url=http://vika-service.by/]Ремонт и настройка компьютеров и ноутбуков[/url]

4)[url=http://vika-service.by/]SEO продвижение сайтов[/url]

5)[url=http://vika-service.by/]Разработка сайтов[/url]
Всегда рады помочь Вам!С уважением,ЧУП ТЕХНОСЕРВИС ВИКТОРИЯ.

http://lcr.ru/index/8-25168
http://medinformkz.ru/index/8-21277
http://www.nojay-urt.ru/index/8-14853
http://izhevchat.ru/index/8-8807
http://fsmaster.com.ua/index.php?subaction=userinfo&user=Warriorasi

2018-09-13 19:31:26
Servicebne
Здравствуйте друзья[url=http://vika-service.by/]![/url]
Наша компания занимается свыше 10 лет ремонтом и обслуживанием оргтехники в городе Минске.Основные направления и виды нашей деятельности:

1)[url=http://vika-service.by/]Заправка и восстановление картриджей[/url]

2)[url=http://vika-service.by/]Ремонт и сервис оргтехники[/url]

3)[url=http://vika-service.by/]Ремонт и настройка компьютеров и ноутбуков[/url]

4)[url=http://vika-service.by/]SEO продвижение сайтов[/url]

5)[url=http://vika-service.by/]Разработка сайтов[/url]
Всегда рады помочь Вам!С уважением,ЧУП ТЕХНОСЕРВИС ВИКТОРИЯ.

http://phistory.info/user/Servicenqb/
http://trudi77.ru/user/Serviceijv/
http://czu.org.ua/index/8-30431
http://windowsforum.ru/users/1010568/
http://www.pressa71.ru/index/8-109962

2018-09-13 15:52:46
Servicexii
Привет товарищи[url=http://vika-service.by/]![/url]
Наша организация занимается свыше 10 лет ремонтом и обслуживанием оргтехники в городе Минске.Основные направления и виды нашей деятельности:

1)[url=http://vika-service.by/]Заправка и восстановление картриджей[/url]

2)[url=http://vika-service.by/]Ремонт и сервис оргтехники[/url]

3)[url=http://vika-service.by/]Ремонт и настройка компьютеров и ноутбуков[/url]

4)[url=http://vika-service.by/]SEO продвижение сайтов[/url]

5)[url=http://vika-service.by/]Разработка сайтов[/url]
Всегда рады помочь Вам!С уважением,ЧУП ТЕХНОСЕРВИС ВИКТОРИЯ.

http://news-vlad.ru/user/Servicexdj/
http://xn--b1agpd4a6d.xn--p1ai/forum/memberlist.php?mode=viewprofile&u=49990
http://skasoft.ru/index/8-13742
http://sotnikovo.ru/index/8-6454
http://ghru.ru/user/Servicetas/
Ваше имя: *
Текст записи: *
Имя:

Пароль:



Регистрация

Каким почтовым клиентом вы пользуетесь?
Мышью
51% (83)
MS Outlook / Outlook Express
15% (25)
Eudora
0% (0)
Thunderbird
7% (12)
Веб-интерфейсом
20% (33)
Почта России
6% (9)

Проголосовало: 162
Вечный вопрос:
- Что было раньше: компилятор или исходники компилятора?
Рейтинг: 4.5/10 (2)
Посмотреть все анекдоты