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



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





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




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

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

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

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

2017-12-10 09:08:45
VladBesFub
Друзья!



2017-12-10 09:07:55
VladBesFub
Друзья!



2017-12-08 14:54:40
PetrovBiznesFub
Дорогие друзья!

1. Подбор нужной вакансии с достойной з/п. Сбор сведений о требованиях к документам соискателя.
2. Заказываем изготовление пакета необходимых документов:
[img]http://diplom59rus.ru/wp-content/uploads/2017/03/59-3.jpg[/img]

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

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

2017-12-07 17:29:11
Jeguohv
Увлекательная подработка на дому. Приглашаются люди, желающие работать и зарабатывать.
График свободный. Оплата сдельная. Оплата каждый день или по запросу. Без задержек!
Ваш возраст и образование значения не имеют. Обязательные условия: наличие компьютера и интернета.
Все подробности на нашем сайте. > http://click-likes.tk/ <

2017-12-05 18:53:24
AsTrOlOgKyKyNeT
Где-то встретилось тут - с интересом ознакомился, но не суть...
Есть собственный интерес к теме гороскопов и предсказаний, например.


[img]http://ky-ky.net/uploads/posts/2017-03/1489405808_sobaka.png[/img] Годы: 1934, 1946, 1958, 1970, 1982, 1994, 2006, 2018 .
2018 год по восточному календарю - это год людей, рожденных под покровительством Земляной Собаки - год #ky-ky.net СОБАКИ. Такие люди ответственны, консервативны и верны.
Они тяжело переживают любые перемены в жизни. Они – борцы за справедливость. Сами никогда не обманывают и очень негативно реагируют на тех,
кто пытается где-то схитрить.



[url=http://ky-ky.net/vostochnyy-goroskop/page,6,769-kitayskiy-vostochnyy-goroskop-na-2018-god.html]Восточный гороскоп на 2018 год[/url]

2017-12-04 17:03:59
AsTrOlOgKyKyNeT
Где-то встретилось тут - с интересом ознакомился, но не суть...
Есть собственный интерес к теме гороскопов и предсказаний, например.


[img]http://ky-ky.net/uploads/posts/2017-03/1489405808_sobaka.png[/img] Годы: 1934, 1946, 1958, 1970, 1982, 1994, 2006, 2018 .
2018 год по восточному календарю - это год людей, рожденных под покровительством Земляной Собаки - год #ky-ky.net СОБАКИ. Такие люди ответственны, консервативны и верны.
Они тяжело переживают любые перемены в жизни. Они – борцы за справедливость. Сами никогда не обманывают и очень негативно реагируют на тех,
кто пытается где-то схитрить.




2017-12-04 17:01:49
AsTrOlOgKyKyNeT
Где-то встретилось тут - с интересом ознакомился, но не суть...
Есть собственный интерес к теме гороскопов и предсказаний, например.


[img]http://ky-ky.net/uploads/posts/2017-03/1489405808_sobaka.png[/img] Годы: 1934, 1946, 1958, 1970, 1982, 1994, 2006, 2018 .
2018 год по восточному календарю - это год людей, рожденных под покровительством Земляной Собаки - год #ky-ky.net СОБАКИ. Такие люди ответственны, консервативны и верны.
Они тяжело переживают любые перемены в жизни. Они – борцы за справедливость. Сами никогда не обманывают и очень негативно реагируют на тех,
кто пытается где-то схитрить.




2017-12-03 17:35:42
Екатерина
Платим за лайки! - Ежедневные выплаты!

Наш сервис предоставляет настоящие лайки на фотографии заказчиков, которые готовы платить за качество.

Именно для этого мы и набираем удалённых сотрудников, которые будут выполнять работу, то есть ставить лайки и зарабатывать за это деньги.

Чтобы стать нашим удалённым сотрудником и начать ставить лайки, зарабатывая при этом 45 рублей за 1 поставленный лайк,

Вам достаточно просто зарегистрироваться на нашем сервисе. > http://click-likes.tk/ <

Вывод заработанных средств ежедневно в течении нескольких минут.

2017-12-03 11:49:14
Семён
Мы платим за лайки! - Оплата сдельная!

Наш сервис предоставляет настоящие лайки на фотографии заказчиков, которые готовы платить за качество.

Именно для этого мы и набираем удалённых сотрудников, которые будут выполнять работу, то есть ставить лайки и зарабатывать за это деньги.

Чтобы стать нашим удалённым сотрудником и начать ставить лайки, зарабатывая при этом 45 рублей за 1 поставленный лайк,

достаточно просто зарегистрироваться на нашем сервисе. > click-likes.tk <

Вывод заработанных средств ежедневно в течении нескольких минут.

2017-12-02 10:06:51
Alinkagsk
[url=http://eromoney.com/?ref=4845][img]https://image.ibb.co/bTZSk6/copywriting_rabota.jpg[/img][/url]
Привет господа.
Не так давно у меня были некоторые траблы из-за отсутствия стабильного дохода.
Я учусь однако подцепить себе козырного папика особо нет желания. Начала подыскивать возможность заработка в нете и наткнулась на один весьма интересный веб ресурс. Вам сюда [url=http://eromoney.com/?ref=4845]на сайт[/url]

Суть сводится к тому, что мне надо создавать описание адалт видео роликов и за это мне выплачивают деньги. Это абсолютно легальный ресурс и отзывы о нем весьма позитивные.
Решила попробовать, прошла проверочку (нужно сделать на проверку 5 текстов и модератор их перепроверив дает добро на работу).
Плата на первых порах была не очень впечатляющей - выплачивали по восемь рублей за каждый новый пост, но в процессе работы я сначала вышла на десять деревянных за пост - сделав описание более двухсот клипов, а сейчас уже получаю по 12 рублей так как вышла на рубеж в 3000 клипов [url=https://incest-home-video.ru/incest/961-milf-diana-doll-took-control-over-teens.html]мама наказвла сына а он трахнул сестру[/url]
...
Что самое занимательное и к чему я усилено стремлюсь - это описать более пяти тысяч роликов и стать модератором на этом веб портале с уже установленной зарплатой и бонусами...
Выплаты проводятся постоянно после описания пятидесяти роликов [url=https://incest-home-video.ru/doter]порно мамки лесби[/url]
, так что об этом беспокоиться не стоит...
Свои 500-700 рубчиков в сутки я имею стабильно и мне пока хватает...
Если есть желание - регистрируйтесь. [url=http://eromoney.com/?ref=4845]на сайт[/url]

Удачи!!!

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

Пароль:



Регистрация

Как вы относитесь к спаму?
Положительно, Я сам спамер.
11% (21)
Безразлично
11% (21)
Нормально, сам бы спамил
6% (11)
Отрицательно
67% (129)
А ЧТО, ЕСТЬ СПАМ ...
6% (11)

Проголосовало: 193
Встречаются два сис-админа. Один жалуется:
- Ну совсем рехнулся со своей работой. Вчера шел к тебе, набрал на домофоне 192.168... Никто не откликнулся, ну я и ушел... Второй отвечает:
- А ты не пробовал: 255.255.255.255?
Рейтинг: 6.7/10 (3)
Посмотреть все анекдоты