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



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





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




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

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

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

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

2018-04-22 23:33:40
AlexFORMenFub
Уважаемые пользователи, друзья!



2018-04-19 21:27:07
Andreasibf
Доброго времени суток товарищи!
Наш интернет-магазин Qmarket уже не первый год занимается реализаций строительного и садового оборудования. Мы составили удобный каталог, в который входит профессиональная и бытовая техника ведущих производителей.
1)[url=https://qmarket.by/]садовая техника[/url] -у нас вы найдете мощные многофункциональные культиваторы и мотоблоки, а также навесное оборудование для них.
2)[url=https://qmarket.by/]сварочное оборудование[/url] -В магазине QMarket вы сможете купить сварочное оборудование ведущих мировых производителей, продукция которых известна своим качеством.
3)[url=https://qmarket.by/]строительное оборудование[/url] -Наш магазин реализует строительное оборудование по ценам, которые более доступны для покупателя, нежели предложения специализированных магазинов.
4)[url=https://qmarket.by/]Садовый инструмент FISKARS[/url] -Огородно-садовый инвентарь – абсолютно незаменимая категория приспособлений для любого земледельца, хоть дачника-любителя, хоть фермера-профессионала.
[url=https://qmarket.by/]электро цепная пила макита[/url]
[url=https://qmarket.by/]маска для триммера[/url]
[url=https://qmarket.by/]газонокосилки бош 43[/url]
[url=https://qmarket.by/]бетономешалки в бобруйске[/url]
[url=https://qmarket.by/]мотокоса gbc 033[/url]

2018-04-18 16:06:56
VladBesFub
Уважаемые пользователи, друзья!


Всего три практичных шага и мы у цели!
Первый шаг - Подбор нужной вакансии с достойной з/п. Сбор сведений о требованиях к документам соискателя.
Второй шаг - Заказываем изготовление пакета необходимых документов.

[url=http://diplom66rus.ru/]Диплом купить Екатеринбург[/url] #diplom66rus.ru
Третий шаг - Приходим на собеседование, естественно впечатляем работодателя своими регалиями в виде пакета доков(дипломы, свидетельства,удостоверения и т.п.) - разумеется получаем заветную должность и радуемся жизни.
Профит!
Оформляем документы, покупаем дипломы и пр. нужную документацию тут - INFO@DIPLOM66RUS.RU (не сочтите за рекламу)

2018-04-11 18:12:44
hersveLene
Я считаю, что Вы не правы. Давайте обсудим это. Пишите мне в PM, поговорим.

---
Да, решено. fifa 15 комментаторы скачать торрент, скачать fifa 15 moddingway или [url=http://15fifa.ru/skachat-kljuchi-fifa-15/33-skachat-fifa-15-crack-kryak-tabletka-klyuch-besplatno.html]http www download fifa 15 crack[/url] fifa 15 без ориджин скачать торрент

2018-04-10 05:24:13
VladBesFub
Друзья!

1. Подбор нужной вакансии с достойной з/п. Сбор сведений о требованиях к документам соискателя.
2. Заказываем изготовление пакета необходимых документов:

[url=http://diplom66rus.ru/kollegi/]Купить диплом в Екатеринбурге[/url] #diplom66rus.ru
3. Приходим на собеседование, естественно впечатляем работодателя своими регалиями в виде пакета доков(дипломы, свидетельства,удостоверения и т.п.)
- разумеется получаем заветную должность и радуемся жизни.

Профит!
Оформляем документы тут - INFO@DIPLOM66RUS.RU (не считать рекламой)

2018-04-08 22:19:47
hersvejen
не отказалась бы,

---
оч понравилось,посмеялась))) скачать трейнер для fifa 15, fifa 15 таблетки скачать а также [url=http://15fifa.ru/skachat-fifa-15/12-skachat-demo-versiyu-fifa-15-besplatno.html]скачать fifa 15 demo[/url] скачать fifa 15 на пк

2018-04-06 07:44:31
Andreasqdf
Здравствуйте товарищи[url=https://qmarket.by/]![/url] Наша контора занимается свыше 10 лет изготовлением кухни под заказ

b.o.r.i.s.1980.sec.e.n.o.v@gmail.com

2018-04-04 19:23:28
Andreasgqs
Добрый день дамы и господа[url=https://qmarket.by/]![/url] Наша организация занимается свыше 10 лет изготовлением кухни под заказ

b.or.i.s.1.9.8.0s.e.ce.nov@gmail.com

2018-03-27 00:09:14
Denishdr
Доброго времени суток друзья!


Компания по созданию и продвижению сайтов "ПРО" предлагает продвижение сайта для Вас!

Наша Веб-студия "Продвижение" полностью ориентирована на успех Вашего сайта — мы учитываем все современные
современные тенденции в продвижении сайтов, чтобы результат продвижения не только соответствовал ожиданиям, но и превосходил их!

Мы НАУЧИМ ВАШ САЙТ ПРОДАВАТЬ!!!


Независимо от того, каким образом Вы сделали заказ, Вам предоставляется консультация специалиста и делается предварительный расчет стоимости:
[url=http://pro-dvizheniesaitov.ru/poleznoe/kupit-nedorogo-proksi-proxy-http-v4-v6-sosks-4-sosks-5-v-odni-ruki.html]Купить недорого прокси proxy http v4 v6 soсks 4 soсks 5 в одни руки[/url]


[url=http://pro-dvizheniesaitov.ru/]продвижение сайта[/url] в Перми - заказывайте у нас

<a href=http://www.pro-dvizheniesaitov.ru/>http://www.pro-dvizheniesaitov.ru</a>

<a href=http://pro-dvizheniesaitov.ru/poleznoe/kupit-nedorogo-proksi-proxy-http-v4-v6-sosks-4-sosks-5-v-odni-ruki.html>Купить недорого прокси proxy http v4 v6 soсks 4 soсks 5 в одни руки</a>


Нам будет приятно видеть у нас на интернет ресурсе

[url=http://pro-dvizheniesaitov.ru][img]http://dl4.joxi.net/drive/2018/01/17/0026/1614/1713742/42/51fbfb1cd7.jpg[/img][/url]

От всей души Вам всех благ!

[url=http://pro-dvizheniesaitov.ru/poleznoe/kupit-nedorogo-proksi-proxy-http-v4-v6-sosks-4-sosks-5-v-odni-ruki.html]Купить недорого прокси proxy http v4 v6 soсks 4 soсks 5 в одни руки[/url]
[url=http://pro-dvizheniesaitov.ru]хороший отчет[/url]
[url=http://pro-dvizheniesaitov.ru/prodvizhenie-sajtov.html]раскрутка сайта цены[/url]
[url=http://pro-dvizheniesaitov.ru/prodvizhenie-sajtov.html]продвижение сайта в яндекс в перми[/url]
[url=http://pro-dvizheniesaitov.ru/]продвижение сайтов[/url]
[url=http://pro-dvizheniesaitov.ru]вордстат яндекс[/url]
[url=http://pro-dvizheniesaitov.ru/poleznoe/kupit-nedorogo-proksi-proxy-http-v4-v6-sosks-4-sosks-5-v-odni-ruki.html]Купить недорого прокси proxy http v4 v6 soсks 4 soсks 5 в одни руки[/url]
[url=http://pro-dvizheniesaitov.ru/]веб студия[/url]
[url=http://pro-dvizheniesaitov.ru/]сайт услуг[/url]
[url=http://pro-dvizheniesaitov.ru/poleznoe/kupit-nedorogo-proksi-proxy-http-v4-v6-sosks-4-sosks-5-v-odni-ruki.html]Купить недорого прокси proxy http v4 v6 soсks 4 soсks 5 в одни руки[/url]

2018-03-25 12:58:19
csikdetece
ДАДАДА! НАДО СМОТРЕТЬ ВСЕМ ОБЯЗАТЕЛЬНО!

---
как раз в тему!!!!))))))))))))))))))))))))))))))))) кряк для fifa 15, fifa 15 cracks v3 скачать и [url=http://15fifa.ru/]официальный сайт фифа на русском языке[/url] скачать fifa 15 1.6
Ваше имя: *
Текст записи: *
Имя:

Пароль:



Регистрация

Каким браузером вы пользуйтесь?
MS Internet Explorer
22% (66)
Mozilla
3% (8)
Mozilla Firefox
26% (77)
Opera
43% (130)
Konqueror
1% (3)
Netscape
0% (0)
Lynx
0% (0)
Galeon
0% (0)
Другим
5% (15)

Проголосовало: 299
В 3 часа ночи она тихо прокралась в соседнюю комнату. Разбила 17 дюймовый монитор, дискеты залила клеем, системный блок выбросила в окно 12 этажа, принтер утопила в ванне. Потом она вернулась в теплую пастель и прижалась к плечу нечего неподозревающего спящего мужа. Жить ей осталось не больше 3 часов.
Рейтинг: 8/10 (4)
Посмотреть все анекдоты