Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> catch, Что такое catch? 
:(
    Опции темы
Peter
Дата 1.7.2003, 13:50 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Смотрел как-то в книжке СИшные ключевые слова; все знакомо, кроме catch. Что это такое, нигде не мог найти. Может, плохо искал? Подскажите, пожалуйста.
  Вверх
Baa
Дата 1.7.2003, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



Оно нужно для обрабоки исключений...
Странно, что бы знаешь ключевое слово try, потому как оно используется в паре с catch


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Step
Дата 1.7.2003, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



try{

возможна исключтительная ситуация

} catch(...){
как ее обрабатывать
}


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Peter
Дата 9.7.2003, 11:04 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Спасибо. Но мне кажется, try - это что-то из области J++, а не Си. По-моему, try в списке ключевых не встречалось.
  Вверх
RAN
Дата 9.7.2003, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

Репутация: 5
Всего: 6



Блин, исключения Java от C достались. Прям обидно даже за любимый язык.
PM MAIL ICQ   Вверх
Step
Дата 10.7.2003, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



Цитата
Блин, исключения Java от C достались. Прям обидно даже за любимый язык.

люди даже историю языка не знают на котором пишут


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Fantasist
Дата 11.7.2003, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: 4
Всего: 41



Цитата
люди даже


Ух-ты! Даже! Может расскажешь историю С++? А заодно Интернета, тоже ведь пользуешься. Ну и Visual Studio.

А кто знает, исключения появились вначале в С или в С++?


--------------------
Волны гасят ветер...
PM MAIL   Вверх
Kor
Дата 12.7.2003, 09:11 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Исключения впервые появились в С++
в с их нет.
В Java они появились вместе с рождением JAVA но не раньше его...


Кстати господа о яичнице, есть еще ключевое слово finally

  Вверх
Step
Дата 14.7.2003, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



Fantasist ты в своем репертуаре.....


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Step
Дата 14.7.2003, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



Цитата
Ух-ты! Даже! Может расскажешь историю С++? А заодно Интернета, тоже ведь пользуешься. Ну и Visual Studio.
А кто знает, исключения появились вначале в С или в С++?

могу и рассказать, так как в плане компьютерных наук, нам только историю и давали, и больше не х***на


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
GanZaleZ
Дата 15.7.2003, 07:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 15.7.2003

Репутация: нет
Всего: нет



Да стабильно , исключения появились в С++ , в С для этого использовался другой механизм .
"catch" нужен жля отлова исключений которые могут возникнуть в блоке "try"
или там же в try" исключение можно выбросить самому использую "then какаято переменая или строка".
Если выбрасываеш сам , то в "catch ()" в скобках нужно поставить тип выбрасываемого исключения
,как функция, Если хочеш отлавливать все тогда савятся ТРИ ТОЧКИ "catch (...)" ;


PM MAIL   Вверх
RAN
Дата 15.7.2003, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

Репутация: 5
Всего: 6



Цитата
исключение можно выбросить самому использую "then какаято переменая или строка".

throw вообще-то, а не then
PM MAIL ICQ   Вверх
Peter
Дата 28.7.2003, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 28.7.2003
Где: Ставрополь

Репутация: -1
Всего: 1



[Ладно уж, зарегистрируюсь...]

Спасибо за ваши ответы, только по ним я не могу стать крутым программером по обработке исключений. Где это все можно прочитать? И еще: с какой версии C++ стала возможной обработка исключений?


--------------------
всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23).
PM MAIL WWW   Вверх
mr.DUDA
Дата 28.7.2003, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



Цитата
Где это все можно прочитать


Примеров куча в MSDN.
Вообще, нужно определиться "а надо-ли оно тебе". Ведь можно реализовать обработку ошибок до их возникновения - простыми проверками выполнения условий, а можно то же самое сделать ч/з блок try-catch, но тогда отлавливать ошибку будешь не ты, а ОС; тебе же дадут право сделать какие-то действия ПОСЛЕ возникновения ошибки. Простой пример - обработка исключений памяти в проге на MFC:

Код
try
{
 int *ptr = new int[1000000000]; // передача управления на первый блок "catch" - ситуация "out-of-memory exception condition"
  // какой-нибудь код ....
  // .... другой пример
  ptr = NULL;
  (*ptr) = 1; // передача управления на второй блок "catch" - ситуация "Access violation" (запись в память по недопустимому адресу)
}

catch(CMemoryException *pex)
{
  // какие-то действия, например MessageBox "не могу выделить память"
  pex->Delete(); // обязательно нужно удалить сам объект "исключение"
}

catch(...)  // (то же самое, что "catch(CException *pex)")
{
  // здесь будут обработаны ВСЕ остальные исключения
  // (т.е. обработчик по умолчанию). Если пользуешься такой формой
  // записи, как в скобках, то нужно вызвать "pex->Delete()".
}


Обрабатывать можно любые исключения ОС. Особо важна их обработка для файловых операций, и вообще в ситуациях, когда ты не имеешь 100% контроля над каким-то процессом. Просто бери контролируемый кусок кода в "скобки" try, а в блоке catch выполняй любые "ответные" действия - закрыть файл, освободить память и т.д.

Еще раз повторюсь - читай MSDN, там куча информации по ВСЕМ вопросам. Если нету на компакте - заходи на microsoft.com в онлайновую версию MSDN, она чем-то даже удобнее.

P.S. Кстати, в Си нету такого ключевого слова "finally" - это из Делфи.
P.P.S. По-моему, в Borland C++ 3.11 появилась поддержка исключений, а может и еще раньше.


--------------------
user posted image
PM MAIL WWW   Вверх
TaTaP
Дата 29.7.2003, 02:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 15.10.2002

Репутация: 1
Всего: 1



Использовать исключения надо - это факт. Есть такой неписаный закон - ко всякой функции необходимо подходить с подозрением на то, что она может выбросить исключения, а каждую функцию проверять в if..else большой гимор => без try...catch никуда не деться.
P.S. "catch(...)" это далеко не то же самое, что "catch(CException *pex)". Например, по Стандарту, operator new в случае неуспешного выделения памяти выбрасывает исключение bad_alloc, поэтому "catch(CException *pex)" его не перехватит, а "catch(...)" обработает корректно. Чем плох "catch(...)", что неизвестно, кто так тебя обломал и выбросил исключение.
P.P.S. а finally в С++ есть (по крайней мере в VC++, не знаю, как в других компиляторах). Их в Стандарте нет, это просто расширение Microsoft...

Это сообщение отредактировал(а) TaTaP - 29.7.2003, 02:51
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0611 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.