Re[2]: подходы к обработке исключений
От: WolfHound  
Дата: 07.05.03 20:17
Оценка:
Здравствуйте, Slick, Вы писали:

S>
S>try {
S>   .....
S>}
S>catch (CTheException& ex) {
S>   .....
S>}
S>
... << RSDN@Home 1.0 beta 6a >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[5]: подходы к обработке исключений
От: WolfHound  
Дата: 07.05.03 20:17
Оценка: +2
Здравствуйте, skyline, Вы писали:

S>Как вам уже написали, лучше инициализацию проводить не в конструкторе, а в отдельном методе.

Чушь. Исключение в конструкторе обычное дело если пишешь на С++, а не на С с классами.
... << RSDN@Home 1.0 beta 6a >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[5]: подходы к обработке исключений
От: WolfHound  
Дата: 07.05.03 20:17
Оценка: +2
Здравствуйте, skyline, Вы писали:

S>Я имею в виду, что

Ууу... Как все запущено... Так нормальные люди не пишут.

S>по сути, одно и тоже, а в обоих случаях программа становится плохо читаемой можно привести подобный пример с циклами, как мне сегодня писали, но циклы не нарушают логику, и являются базовым понятием теории логических схем.

А условные переходы значит уже не являются?
S>Если ты считаешь, что то же вено для выбросов исключений, приведи пример, как это обозначается на логической схеме алгоритма.
Хм... Когда я их рисовал в последний раз о исключениях еще даже не слышал... Хотя если подумать то в системе с исключениями у каждой подпрограммы будут два выхода один с результатом второй с исключением.

S>Я плохо выразил свою мысль. Если у меня в проге редкая ошибка, то в первом случая прога будет падать по крайне мерее не сразу, а по моему опыту, лучше уж, если у клиента программа работает не правильно, чем падает с сообщением Windows

Плохой у тебя опыт и бедные твои заказчики.

S>Сколько людей, столько и мнений.

В моей программе перехватываются все исключения(просто надо немного заботися о проектировании). Болие того для выброса исключений я использую пару трюков вобщем лог с исключениями содержит очень подробную информацию о том что (имя исключения), где (фаил, строка), почему(проваленое условие) и коментарии(часть контекста по усмотрению программиста). А если учесть что формат лога строго стандартизирован то для него можно написать смотрелку(что я и сделал).
... << RSDN@Home 1.0 beta 6a >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[2]: подходы к обработке исключений
От: Дмитрий Наумов  
Дата: 08.05.03 06:48
Оценка:
Здравствуйте, Slick, Вы писали:

Как написал WolfHound, лучше всего ловить через ссылку:

try {
   .....
}
catch (CTheException& ex) {
   .....
}


Это лучше чем ловить по значению потому что нет одного лишнего копирования.
... << RSDN@Home 1.0 beta 6a >>
Re[3]: подходы к обработке исключений
От: ssm Россия  
Дата: 08.05.03 06:50
Оценка:
Здравствуйте, Дмитрий Наумов, Вы писали:

ДН>Как написал WolfHound, лучше всего ловить через ссылку:


А почему не константную?
Re[4]: подходы к обработке исключений
От: Дмитрий Наумов  
Дата: 08.05.03 07:01
Оценка:
Здравствуйте, ssm, Вы писали:

ssm>Здравствуйте, Дмитрий Наумов, Вы писали:


ДН>>Как написал WolfHound, лучше всего ловить через ссылку:


ssm>А почему не константную?


As you wish... А если ты поймал исключение, добавил туда еще какой нить информации и rethrow сделал?
... << RSDN@Home 1.0 beta 6a >>
Re[4]: подходы к обработке исключений
От: Alexey Chen Чили  
Дата: 08.05.03 07:07
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, Alexey Chen, Вы писали:


AC>
AC>inline bool Ok(ECODE e) { return e == OK; }
AC>//....
AC>  Ok(f(x)) &&
AC>  Ok(f2(x)) &&
AC>  Ok(f3(x));
AC>

К>Повбывав бы! Знаешь, как весело такие вещи отлаживать?
К>А я, увы, знаю

Знаю
Еще существуют макросы типа return_if_fail и retval_if_fail которые могут вызывать DebugBreak и писать в лог вражение

Но это, как и приведенный пример, уже из области C и ембеддед систем в которых C++ не держит исключений.
В EVC, например , их просто нет.
Re[5]: подходы к обработке исключений
От: ssm Россия  
Дата: 08.05.03 07:12
Оценка:
Здравствуйте, Дмитрий Наумов, Вы писали:

ssm>А почему не константную?


ДН>As you wish... А если ты поймал исключение, добавил туда еще какой нить информации и rethrow сделал?



struct E{int i; E(const E &){...}};

void low_level(){
  ...
  try{...}
  catch(E &e){
    ...
    e.i++; 
    raise e;//тоесть тут не произойдет копирование E?
    ...  
  }
  ...
}

void high_level{
  try{
   ...
   low_level();
   ... 
  }
  catch(const E &e){
    ...
  }
}
Re[6]: подходы к обработке исключений
От: Дмитрий Наумов  
Дата: 08.05.03 07:22
Оценка:
Здравствуйте, ssm, Вы писали:

ssm>

ssm>
ssm>struct E{int i; E(const E &){...}};

ssm>void low_level(){
ssm>  ...
ssm>  try{...}
ssm>  catch(E &e){
ssm>    ...
ssm>    e.i++; 
ssm>    raise e;//тоесть тут не произойдет копирование E?
ssm>    ...  
ssm>  }
ssm>  ...
ssm>}

ssm>void high_level{
ssm>  try{
ssm>   ...
ssm>   low_level();
ssm>   ... 
ssm>  }
ssm>  catch(const E &e){
ssm>    ...
ssm>  }
ssm>}
ssm>


Если ты в строке raise e; имел ввиду
throw;


то не произойдет
... << RSDN@Home 1.0 beta 6a >>
Re[7]: подходы к обработке исключений
От: ssm Россия  
Дата: 08.05.03 07:26
Оценка:
Здравствуйте, Дмитрий Наумов, Вы писали:

ДН>Если ты в строке raise e; имел ввиду

ДН>
ДН>throw;
ДН>



Такое частенько бывает, когда пишешь на двух языках одновременно
Re[5]: подходы к обработке исключений
От: Дмитро  
Дата: 08.05.03 08:01
Оценка:
Здравствуйте, Alexey Chen, Вы писали:

AC>Но это, как и приведенный пример, уже из области C и ембеддед систем в которых C++ не держит исключений.

AC>В EVC, например , их просто нет.

Почему нет? Есть. А если указать ключ /EHsc, то даже будет включена "unwind semantics". (EVC 4.0)

--
Дмитрий
--
Дмитрий
Re[6]: подходы к обработке исключений
От: Alexey Chen Чили  
Дата: 08.05.03 08:25
Оценка: 6 (1)
Здравствуйте, Дмитро, Вы писали:

Д>Здравствуйте, Alexey Chen, Вы писали:


AC>Но это, как и приведенный пример, уже из области C и ембеддед систем в которых C++ не держит исключений.

AC>В EVC, например , их просто нет.

Д>Почему нет? Есть. А если указать ключ /EHsc, то даже будет включена "unwind semantics". (EVC 4.0)


Д>--

Д>Дмитрий

А оно не под CE.NET компилять умеет? Без хитрых приседаний. Это во-первых.
А во-вторых, зачем за новые баги, бабло M$ платить если у меня есть EVC 3.0 и его баги я знаю ?

Да и вопрос был не в этом. Есть некоторые ембеддед платформы для которых для меня доступен только gcc у которого не потрудились при портировании приделать исключения. Просто руководствуясь здравым смыслом, перед тем как писать утильный код который много где используеьтся и не зависит от платформы , стоит подумать, а действительно ли нужны эти исключения.
Re[5]: подходы к обработке исключений
От: jazzer Россия Skype: enerjazzer
Дата: 08.05.03 10:50
Оценка:
Здравствуйте, skyline, Вы писали:

S>Здравствуйте, Slick, Вы писали:


S>Здравствуйте, skyline, Вы писали:


S>Здравствуйте, Slick


S>Какими критериями руководствоваться при решении такой задачи?

S>Или может быть нужен в корне другой подход?
S>Если я правильно понял, вы спрашиваете, как групировать исключительные ситуации?

S>Да, именно так.


S>Просто интересно свежее мнение на эту тему.


S>Моё мнение таково — существуют 4 вида исключительных ситуаций

S>1 Не критические ситуации
S>2 Критические ошибки — программу надо срочно сворачивать, дальше работать нет смысла
S>3 Программисткие ошибки — только на этапе разработки
S>4 Ошибки какой-то внешней среды

Одна и та же ситуация может быть критической ошибкой, а может быть ничего не значащей фигней.
Посему как тут строить иерархию исключений, не очень понятно.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[7]: подходы к обработке исключений
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 08.05.03 12:01
Оценка:
Здравствуйте, Дмитрий Наумов, Вы писали:

ssm>  try{...}
ssm>  catch(E &e){
ssm>    ...
ssm>    e.i++; 
ssm>    throw;//тоесть тут не произойдет копирование E?
ssm>    ...  
ssm>  }


ДН>не произойдет


Это зависит от компилятора. На BCB5, если меня не подводили глаза — объект копируется.
Короче, всякое бывает
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[8]: подходы к обработке исключений
От: Дмитрий Наумов  
Дата: 08.05.03 12:11
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Это зависит от компилятора. На BCB5, если меня не подводили глаза — объект копируется.

КД>Короче, всякое бывает

Что то мне казалось, что такие вещи регламентируются стандартом... Но во-первых утверждать не буду, во вторых Борланд волен делать что угодно...
... << RSDN@Home 1.0 beta 6a >>
Re[2]: подходы к обработке исключений
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 08.05.03 12:14
Оценка:
Здравствуйте, Slick, Вы писали:

S>Что если потенциальных исключений в разрабатываемой системе достаточно много?

здесь
Автор: Коваленко Дмитрий
Дата: 19.02.03


S>Или может быть нужен в корне другой подход?

Общий смысл — ловишь базовый класс всех исключений, а потом через dynamic_cast анализируешь — что поймал.

У меня количество catch-ей сократилось как минимум в два раза

Вторым премуществом оказалось то, что все перехваченные исключения анализируются централизовано, поэтому добавлять новые категории исключений достаточно просто. Для COM объектов это оказалось — сам то
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[8]: подходы к обработке исключений
От: Bell Россия  
Дата: 08.05.03 12:16
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:


КД>Это зависит от компилятора. На BCB5, если меня не подводили глаза — объект копируется.

КД>Короче, всякое бывает

Вообще-то это жестко оговорено в стандарте (15.1/4) — никаких копирований при throw;
Любите книгу — источник знаний (с) М.Горький
Re[9]: подходы к обработке исключений
От: Кодт Россия  
Дата: 08.05.03 12:18
Оценка:
Здравствуйте, Дмитрий Наумов, Вы писали:

ДН>Что то мне казалось, что такие вещи регламентируются стандартом... Но во-первых утверждать не буду, во вторых Борланд волен делать что угодно...


Это вопрос оптимизации... Так же, как возвращение объекта из функции.
(=^.^=) Neko ... << RSDN@Home 1.0 beta 6a >>
Перекуём баги на фичи!
Re[10]: подходы к обработке исключений
От: Дмитрий Наумов  
Дата: 08.05.03 12:24
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, Дмитрий Наумов, Вы писали:


ДН>>Что то мне казалось, что такие вещи регламентируются стандартом... Но во-первых утверждать не буду, во вторых Борланд волен делать что угодно...


К>Это вопрос оптимизации... Так же, как возвращение объекта из функции.


А Bell в соседнем посте утверждает обратное... Сам я стандарт по этому пункту не изучал, но в Мейерсе вроде упоминалось отсутствие копирования, хотя может и глючит. А если копирование есть то:
try
{
  try
  {
    // ...
    CMyException e;
    e.set(1);
    throw e;
  }
  catch(CMyException e1)
  {
    e1.set(2); 
    throw;
  }
}
catch(CMyException& e2)
{
  // что здесь будет в e2 - 1 или 2 ?
}
... << RSDN@Home 1.0 beta 6a >>
Re[10]: подходы к обработке исключений
От: Bell Россия  
Дата: 08.05.03 12:25
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Это вопрос оптимизации... Так же, как возвращение объекта из функции.


Нет, это не так:

15.1/4
...
The temporary persists as long as there is a handler being executed for that
exception. In particular, if a handler exits by executing a throw; statement, 
that passes control to another handler for the same exception, so the temporary remains.
...
Любите книгу — источник знаний (с) М.Горький
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.