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



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





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




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

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

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

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

2017-06-26 17:59:08
valinaNess
Пройдите 1 регистрацию, сделайте 2 действия
и получайте от 8950 рублей каждые сутки в автоматическом режиме.

Мы гарантируем:
- Первый заработок в течении 60 минут.
- Стабильный доход 24 часа в сутки.
- Поступление денег без задержек.
- Для России, стран СНГ и Европы.
- Без вложений и установки ПО.
- Специально для новичков и людей без опыта.

Ознакомтесь с условиями на нашем сайте. ( http://prostozarplata.tk/ )

2017-06-26 12:08:47
qalinarof
Наш сервис предоставляет настоящие лайки на фото заказчиков, которые готовы платить за качество.

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

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

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

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

2017-06-25 21:48:48
walinaNess
Несложная работа с обучением, зарплата высокая!

Вы работаете дома! Полностью честно и прозрачно;
Доступно для всех - неважно кто вы и какой у вас опыт работы в интернете!
Вы будете зарабатывать: свыше четырёх тысяч рублей в день!
Сложность: Несложно!
Оплата: - уже на следующий деньги у вас на счету!

Ознакомтесь с условиями на нашем сайте. > www.realno-money.tk < Скопируйте и вставьте в адресную строку Вашего браузера.

2017-06-25 17:35:55
walinarof
Уникальный сервис помощи получения кредита от частного инвестора, а так же кредитных организаций. Подходит как компаниям, так и частным лицам.

Займ от частного инвестора.

Наша компания помогает встретиться инвестору и заёмщику.

Прямой контакт с инвестором
Любая кредитная история
Нужен только паспорт
Работаем с частными лицами и фирмами
Любой регион
Сумма от 5,000 до 50,000,000 руб
Процент одобрения 97%

Преимущества:

- Без залога и поручительства!
- Ставка - всего от 1% в месяц!
- Без скрытых платежей и комиссий!

Оформите заявку на нашем сайте. > www.ch-investor.tk <

2017-06-25 12:49:26
nElenaNess
Наш сервис предоставляет настоящие лайки на фотографии заказчиков, которые готовы платить за качество.

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

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

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

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

2017-06-24 21:39:50
pElenarof
Наш сервис предоставляет настоящие лайки на фотографии заказчиков, которые готовы платить за качество.

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

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

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

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

2017-06-23 12:09:24
legorrof
Несложная работа с обучением, высокая оплата!

Вы работаете дома! Полностью честно и прозрачно;
Доступно для всех - неважно кто вы и какой у вас опыт работы в интернете!
Вы будете зарабатывать: свыше четырёх тысяч рублей в день!
Сложность: Несложно!
Оплата: - уже на следующий деньги у вас на счету!

Ознакомтесь с условиями у нас на сайте. > realno-money.tk < Скопируйте и вставьте в адресную строку Вашего браузера.

2017-06-23 08:56:43
delmetdhs
удалите,пожалуйста! [url=http://delmet.by/].[/url]






gorsec198.0r.use.r.v@gmail.com

2017-06-22 20:42:00
pElenarof
Наш сервис предоставляет настоящие лайки на фотографии заказчиков, которые готовы платить за качество.

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

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

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

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

2017-06-22 16:00:17
androdaf
«Халва» - Карта Рассрочки

http://bit.ly/2pJ9LnO - займ
<a href=http://bit.ly/2pJ9LnO>кредитование бизнеса</a>
<a href=http://bit.ly/2pJ9LnO>кредит онлайн</a>
[url=http://bit.ly/2oQUzUu]автокредит[/url]
http://bit.ly/2pJ9LnO - проценты по займу

[url=http://www.reanimator.by/index.php?option=com_k2&view=itemlist&task=user&id=115875]Всегда 0% рассрочки в 10 000 магазинов[/url]
[url=http://www.squarefoot.com.sg/index.php?option=com_k2&view=itemlist&task=user&id=90589]Магазины на любой вкус[/url]
[url=http://bellasandrabeautique.com/index.php?option=com_k2&view=itemlist&task=user&id=2369165]Магазины на любой вкус[/url]
[url=http://www.bainslesbains-tourisme.fr/index.php?option=com_k2&view=itemlist&task=user&id=55694]ВЫГОДНЫЕ ПОКУПКИ[/url]
[url=http://www.agriorganichut.com/index.php?option=com_k2&view=itemlist&task=user&id=6125]ВЫГОДНЫЕ ПОКУПКИ[/url]

Всегда 0%! Рассрочка в 10 000+ магазинов. Обслуживание - 0 ?. Оставь Заявку

[url=http://bit.ly/2sqTLLv][img]http://static1.keep4u.ru/2017/06/16/CzJKT9uQUkGTeRBg1UvKA8c410.th.gif[/img][/url]
[url=https://app.halvacard.ru/?utm_medium=Affiliate&utm_source=cpahub&utm_campaign=80]Выгодные покупки[/url]

<a href=http://bit.ly/2sqTLLv>Невероятные условия</a>

<a href=http://esals.eu/index.php?option=com_k2&view=itemlist&task=user&id=36765>Кэшбери - ЗАБУДЬ О ФИНАНСОВЫХ ПРОБЛЕМАХ</a>

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

Пароль:



Регистрация

Какая OS удобнее, на ваш взгляд?
MS Windows / Vista
66% (194)
Linux
19% (57)
SunOS
1% (3)
QNX
1% (2)
BSD
4% (12)
MacOS
3% (8)
BeOS
1% (3)
Unix
1% (2)
Другая
4% (13)

Проголосовало: 294
Забрали интернетчика в армию. На границе служить. Стоит он на посту. Вдруг - шаги.
- Пароль!!! ...тишина
- Пароль!!!! ...тишина
Программер снимает с плеча автомат... короткая очередь...
- User Anonymous Access Denied.
Рейтинг: 8.5/10 (8)
Посмотреть все анекдоты