|
|
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
Вяло что-то, вяло обсуждаем... Надо подлить маслица в огонь: А вот что делать, ежели ошибка произошла в одном потоке, а обработать ее надо в другом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 21:06 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
onstat- White Owl Ну если это правильно и клево, покажи мне реальную задачу решеную через исключения и чтоб это решение было удобнее чем решение через коды возврата. Вот man_555 очень любит исключения, но показать такую реальную задачу не смог. Может ты сможешь? Как вариант: Выход из тупиков и бесконечных циклов при обработке графов.Не годится. После натыкания на тупик надо обязательно проверить братские проходы. А значит каждый раз при шаге назад надо будет проверять был ли там тупик. А это можно с легкостью делать и на кодах возврата. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 21:11 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
White Owl пишет: > Ну если это правильно и клево, покажи мне реальную задачу решеную через > исключения и чтоб это решение было удобнее чем решение через коды > возврата. Вот man_555 очень любит исключения, но показать такую реальную > задачу не смог. Может ты сможешь? CTResults &rs = query.getResults(); for(size_t i =0; i < rs[0].NRows(); ++i) { const CTRow &row = rs[0] ; // Здесь чисто теоретически могут возникать exceptopns // если в наборе данных нет полей с названиями "name", "age" или "gender". // Но в отлаженном коде такого быть не может. А если такое случается, // надо вылететь на фиг и ничего не делать. std::cout << "Name:" << row["name"] << " " << "Age: " << row["age"] << " " << "Gender:" << row["gender"] << std::endl; } > Бррр.. Ну что значит "не писать код обработки ошибок"? Ты в любом случае > будешь писать код обработки ошибки или код обработки исключения. В чем > разница то? Я БУДУ ПИСАТЬ ЕГО ОДИН РАЗ !! А не в каждой функции в стеке вызовов. В этом разница. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 21:30 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
blindedВяло что-то, вяло обсуждаем... Надо подлить маслица в огонь: А вот что делать, ежели ошибка произошла в одном потоке, а обработать ее надо в другом. У каждой инти свой стек, она его и будет раскручивать. ИМХО А обработчик исключений рапотовать другой нити стандартными средствами синхронизации. Если уж срочно нужно, то конструктор класса исключений тоже по идее может. Очень интересная тема , кстате. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 21:38 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
White Owl onstat- White Owl Ну если это правильно и клево, покажи мне реальную задачу решеную через исключения и чтоб это решение было удобнее чем решение через коды возврата. Вот man_555 очень любит исключения, но показать такую реальную задачу не смог. Может ты сможешь? Как вариант: Выход из тупиков и бесконечных циклов при обработке графов.Не годится. После натыкания на тупик надо обязательно проверить братские проходы. А значит каждый раз при шаге назад надо будет проверять был ли там тупик. А это можно с легкостью делать и на кодах возврата. Я знал, что Вы так ответите. С таки же успехом вы будете проходить теже пути и без исключений. Я не говорил, что исключения заменяют карту проходов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 21:45 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
onstat- blindedВяло что-то, вяло обсуждаем... Надо подлить маслица в огонь: А вот что делать, ежели ошибка произошла в одном потоке, а обработать ее надо в другом. У каждой инти свой стек, она его и будет раскручивать. ИМХО А обработчик исключений рапотовать другой нити стандартными средствами синхронизации. Если уж срочно нужно, то конструктор класса исключений тоже по идее может. Очень интересная тема , кстате. Ну так потому и затронул :) А что касается исключений, то тут двух мнений быть не может. С исключениями жизнь проще и веселее, чем без них. Хотя бы потому что исключение может нести в себе гораздо больше информации об ошибке, нежели просто код возврата. Контекст в котором произошла ошибка - вот чего зачастую не хватало при обработки ошибки. Если вспомнить былые времена, то сколько сил уходило на написание всяческих отладочных вызовов с записью в системные логи или самописные debug файлы, причем этими вызовами была пронизана вся программаю А что касается обработки ошибок в другом потоке, то посмотрите на паттерн Капсула, я 2 второй странице ссылочку писал. Ну что твои исключения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 22:35 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
MasterZivCTResults &rs = query.getResults(); for(size_t i =0; i < rs[0].NRows(); ++i) { const CTRow &row = rs[0] ; // Здесь чисто теоретически могут возникать exceptopns // если в наборе данных нет полей с названиями "name", "age" или "gender". // Но в отлаженном коде такого быть не может. А если такое случается, // надо вылететь на фиг и ничего не делать. std::cout << "Name:" << row["name"] << " " << "Age: " << row["age"] << " " << "Gender:" << row["gender"] << std::endl; } Поясни пожалуйста, что значит "вылететь на фиг и ничего не делать"? Для вылета нафиг вообще никакая обработка ошибок не нужна :) MasterZiv> Бррр.. Ну что значит "не писать код обработки ошибок"? Ты в любом случае > будешь писать код обработки ошибки или код обработки исключения. В чем > разница то? Я БУДУ ПИСАТЬ ЕГО ОДИН РАЗ !! А не в каждой функции в стеке вызовов. В этом разница.Еще раз "бррр". А почему ты решил что я буду что-то там писать в каждой функции??? Вон в приведеном примере, когда я определяю оператор [] для резалтсета, я предпочту не бросать исключение, а возвращать указатель на пустую строку. Тогда, даже если злодей пойдет и переименует поле gender в поле sex - я все равно получу список name-age с пустотой вместо gender. А в твоем варианте обращение к row["gender"] вызовет полный аборт всей процедуры и ты не получишь вообще ничего. А я хотя бы часть данных увижу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 23:13 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
onstat-С таки же успехом вы будете проходить теже пути и без исключений. Я не говорил, что исключения заменяют карту проходов.Конечно это можно сделать и через исключения и без них. Но спор то идет: "Исключения: за и против" blindedС исключениями жизнь проще и веселее, чем без них. Хотя бы потому что исключение может нести в себе гораздо больше информации об ошибке, нежели просто код возврата. Контекст в котором произошла ошибка - вот чего зачастую не хватало при обработки ошибки. Если вспомнить былые времена, то сколько сил уходило на написание всяческих отладочных вызовов с записью в системные логи или самописные debug файлы, причем этими вызовами была пронизана вся программаюЭто очень убедительное утверждение, до тех пор пока не задумаешься, а кто именно и где заполняет исключение этим самым контекстом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 23:23 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
White Owl Вон в приведеном примере, когда я определяю оператор [] для резалтсета, я предпочту не бросать исключение, а возвращать указатель на пустую строку. Тогда, даже если злодей пойдет и переименует поле gender в поле sex - я все равно получу список name-age с пустотой вместо gender. А в твоем варианте обращение к row["gender"] вызовет полный аборт всей процедуры и ты не получишь вообще ничего. А я хотя бы часть данных увижу. Если бы строители строили здания, как программисты пишут программы.... С таким подходом нужно писать на Basic, не забывая в каждой процедуре написать Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 23:40 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
blinded пишет: > делать, ежели ошибка произошла в одном потоке, а обработать ее надо в > другом. Использовать IPC. Ни стандартные методы обработки, ни exceptions здесь ни при чем. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 00:12 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
White Owl пишет: > Поясни пожалуйста, что значит "вылететь на фиг и ничего не делать"? Для > вылета нафиг вообще никакая обработка ошибок не нужна :) Пример раз : Программа - консольное приложение, которое должно сформировать и отправить электронное письмо. Если что-то не так, например, одно из полей отсутствует, приложение должно завершиться с ошибкой. Бросается исключение, оно ловится в main, выводится сообщение об ошибке, завершается приложение. Пример два. Программа - GUI -приложение, форма для редактирования данных. На форме есть кнопка "Расчитать", при нажатии на нее производится определенное вычисление. Если что-то не так - нет полей - вычисление производить невозможно. Значение, получаемое в ходе вычисления, неопределено. Исключение ловится во фрейме, обрамляющем обработку сообщения, обрабатывается соотв. образом (выводится сообщ. об ошибке) и программа не выполняет действия "Расчет". Приложение при этом может продолжать работать дальше в части, не касающейся этого, а после устранения проблемы - может работать нормально и здесь. А почему ты решил что я буду что-то там писать в каждой > функции??? Вон в приведеном примере, когда я определяю оператор [] для > резалтсета, я предпочту не бросать исключение, а возвращать указатель на > пустую строку. 1) Там возвращается не указатель, а ссылка. 2) Возврат специального значения в случае ошибки - плохой подход. 3) Тобой описывается другая семантика работы функции. И такая, и такая функция могут существовать, причем вместе. Для одной исключения не нужны, для другой - нужны. Тогда, даже если злодей пойдет и переименует поле gender > в поле sex - я все равно получу список name-age с пустотой вместо > gender. А в твоем варианте обращение к row["gender"] вызовет полный > аборт всей процедуры и ты не получишь вообще ничего. А я хотя бы часть > данных увижу. И ты думаешь, что это хорошо? Я вообще не знаю, что такое "часть данных". Вот например, есть у тебя банковский атрибут. Но без БИК. Это все равно что его бы и не было вообще. Так что либо все, либо ничего. В общем, все, к чему ты призываешь - неправильно, нельзя так писать программы. Если ошибка есть, ее нельзя частично игнорировать. Бывают конечно исключения, но ... В общем-то не нравятся тебе исключения - ради бога, не используй. Твои программы, тебе их потом поддерживать. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 00:29 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
White Owl Это очень убедительное утверждение, до тех пор пока не задумаешься, а кто именно и где заполняет исключение этим самым контекстом. Заполняется при throw. Уже не помню откуда этот очень полезный и показательный пример с SQL.RU || RSDN (Автор не я, копирайт утерян): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. В месте перехвата вы получаете строку и файл, где оно было возбуждено. Можете отнаследоваться и в конструктор в качестве параметра передать другую дополнительную информацию. Которую потом обработаете в месте перехвата. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 11:27 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
MasterZivПример раз : Программа - консольное приложение, которое должно сформировать и отправить электронное письмо. Если что-то не так, например, одно из полей отсутствует, приложение должно завершиться с ошибкой. Бросается исключение, оно ловится в main, выводится сообщение об ошибке, завершается приложение.Точно так же, только вместо throw используем return. Решение ничем кроме синтаксиса не отличается. MasterZivПример два. Программа - GUI -приложение, форма для редактирования данных. На форме есть кнопка "Расчитать", при нажатии на нее производится определенное вычисление. Если что-то не так - нет полей - вычисление производить невозможно. Значение, получаемое в ходе вычисления, неопределено. Исключение ловится во фрейме, обрамляющем обработку сообщения, обрабатывается соотв. образом (выводится сообщ. об ошибке) и программа не выполняет действия "Расчет". Приложение при этом может продолжать работать дальше в части, не касающейся этого, а после устранения проблемы - может работать нормально и здесь.Опять таки, функция расчета может делать throw, может делать return errormessage. Разница чисто синтаксическая. MasterZiv1) Там возвращается не указатель, а ссылка. 2) Возврат специального значения в случае ошибки - плохой подход. 3) Тобой описывается другая семантика работы функции. И такая, и такая функция могут существовать, причем вместе. Для одной исключения не нужны, для другой - нужны.1) в данном случае это не важно 2) Почему плохой? Да, это не всегда возможно, но в большинстве случаев вполне возможно и запросто. 3) Конечно другая, мы ж о том и говорим какой из подходов удобнее :) Но вот если одновременно существуют два варианта функции: возвращающая код ошибки или бросающая исключение - вот это уже будет плохо. Запутаться будет легко. MasterZivИ ты думаешь, что это хорошо? Я вообще не знаю, что такое "часть данных". Вот например, есть у тебя банковский атрибут. Но без БИК. Это все равно что его бы и не было вообще. Так что либо все, либо ничего.Да, я думаю что это хорошо. Если я знаю что без БИК запись быть не может - я во первых запрещу такие записи хранить в БД :) А во вторых, если по каким-то причинам я не могу поправить структуру БД, я могу уже на клиенте делать специальную проверку на заполненность поля "БИК" и обламывать вывод с соответствующей диагностикой. А если речь идет о вспомогательной таблице, ну хотя бы - контактное лицо для этого банковского аттрибута - там поле gender вполне может быть а может и не быть. Но обламывать показ список всех клиентов только из-за того что какому-то из главбухов забыли указать пол? Или как я уже предполагал поле пола переименовали. Есть информация важная, есть второстепенная. Важную - ты всегда будешь специально проверять (и не по одному разу) а второстепенную можно отдать на откуп общему обработчику ошибок. Выдача пустого результата здесь на мой взгляд более подходит чем глобальный облом. MasterZivВ общем, все, к чему ты призываешь - неправильно, нельзя так писать программы. Если ошибка есть, ее нельзя частично игнорировать. Бывают конечно исключения, но ... В общем-то не нравятся тебе исключения - ради бога, не используй. Твои программы, тебе их потом поддерживать. Ну почемуж неправильно? Оглянись вокруг - сколько программ написано на языках не имеющих механизма исключений вообще. И ведь работают! И поддерживаются эти программы. Или вы на таких языках в принципе не пишите? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 19:07 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
Не всетаки есть места где гораздо удобнее с исключениямию Ну ведь согласись template< typename T> class Stack { public: ... void push(const T&); //Ну ведь гораздо симпатичнее получит exception чем возвращать int void pop(); ... const T& read(); // Ну а ежели здесь вернут ссылку на NULL объект для пустого стека, ну совсем фи }; ---- Если молния в лоб угодит, Значит просто подставлен лоб ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 19:27 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
White OwlТочно так же, только вместо throw используем return. Решение ничем кроме синтаксиса не отличается. Так и есть. Одна из основных целей задействования механизма исключений и состоит в том, чтобы уменьшить количество писанины. Сравните, к примеру, код работы с неким COM-объектом: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Как видите код, бросающий исключение, выглядет проще, проще понять алгоритм работы, проще вносить изменения и т.д. White OwlНу почемуж неправильно? Оглянись вокруг - сколько программ написано на языках не имеющих механизма исключений вообще. И ведь работают! И поддерживаются эти программы. Или вы на таких языках в принципе не пишите? :) Ну если рассуждать, то можно сказать, что и ассемблер - замечательный язык для решения прикладных задач. Ведь сколько замечательных программ на нем написано! А в нем тоже нет исключений. И контроля типов нет. И автоматического управления памятью тоже нет. Да вообще ничего нет :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 19:33 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
blindedНе всетаки есть места где гораздо удобнее с исключениямиюВот в том то и дело, что я не знаю таких мест. blindedНу ведь согласисьНе соглашусь. blinded const T& read(); // Ну а ежели здесь вернут ссылку на NULL объект для пустого стека, ну совсем фиПочему же "фи"? Вполне нормально. Во первых, для стека с объектами NULL это очень хороший индикатор "нет объекта", во вторых для стека с числами возвращать ноль из пустого стека это традиция овеяная десятилетиями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 19:51 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
roman10 // С исключениями // Для этого вокруг всех методов пишем обертки вида:Угу... И писание оберток вокруг всех методов уменьшает количество писанины? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 19:58 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
White OwlУгу... И писание оберток вокруг всех методов уменьшает количество писанины? Да, уменьшает. Обертки пишутся только один раз (а в отношении COM-объектов, вообще генерируются автоматически). Даже в небольших проектах, объем кода, приходящийся на обертки, будет существенно меньше объема постоянных проверок кодов возврата. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 20:05 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
White Owl blindedНе всетаки есть места где гораздо удобнее с исключениямиюВот в том то и дело, что я не знаю таких мест. б.м. неудача при попытке захвата ресурса в конструкторе как раз тот случай? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 20:16 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
White Owl blindedНе всетаки есть места где гораздо удобнее с исключениямиюВот в том то и дело, что я не знаю таких мест. blindedНу ведь согласисьНе соглашусь. blinded const T& read(); // Ну а ежели здесь вернут ссылку на NULL объект для пустого стека, ну совсем фиПочему же "фи"? Вполне нормально. Во первых, для стека с объектами NULL это очень хороший индикатор "нет объекта", во вторых для стека с числами возвращать ноль из пустого стека это традиция овеяная десятилетиями. Обратите внимание это НЕ указатель , а ссылка . проверять как? Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 21:13 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
White Owl blindedНе всетаки есть места где гораздо удобнее с исключениямиюВот в том то и дело, что я не знаю таких мест. Я тоже так думал, пока не начал писать с ними. White Owl blindedНу ведь согласисьНе соглашусь. Я не навязываюсь White Owl blinded const T& read(); // Ну а ежели здесь вернут ссылку на NULL объект для пустого стека, ну совсем фиПочему же "фи"? Вполне нормально. Во первых, для стека с объектами NULL это очень хороший индикатор "нет объекта", во вторых для стека с числами возвращать ноль из пустого стека это традиция овеяная десятилетиями. Один маленький недостаток для каждого типа T свое понятие о NULL объекте для int 0, а для какого-нибудь employee? Вот и не получится никакого обобщенного типа стека:( Нет, конено можно написать и так template <typename T> class Stack { public: ... int size() const; const T& read() const { assert(size()); return ...; } }; Жить можно, все равно при отладке вылезет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 21:14 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
White Owl пишет: > Точно так же, только вместо throw используем return. Решение ничем кроме > синтаксиса не отличается. Ну ты стойкий перец! Упорно меня не хочешь понимать. Решения ОТЛИЧАЮТСЯ тем, что при RETURN тебе надо будет написать обработку ошибок НА ВСЕХ ПРОМЕЖУТОЧНЫХ УРОВНЯХ в стеке вызовов, приведших к вызову данной функции. Для того и созданы exceptions чтобы с этим бороться. Если бы была разница только в синтаксисе, никому было бы это не нужно. Но я не буду тебя далее убеждать ввиду твоей особой "стойкости" в твоих заблуждениях. > 2) Возврат специального значения в случае ошибки - плохой подход. > 2) Почему плохой? Да, это не всегда возможно, но в большинстве случаев > вполне возможно и запросто. Именно потому, что это не всегда возможно. И потому, что делая так ты уже не всегда отлицаешь нормальную ситуацию от ошибочной. > 3) Тобой описывается другая семантика работы функции. > И такая, и такая функция могут существовать, причем вместе. > Для одной исключения не нужны, для другой - нужны. > 3) Конечно другая, мы ж о том и говорим какой из подходов удобнее :) Но > вот если одновременно существуют два варианта функции: возвращающая код > ошибки или бросающая исключение - вот это уже будет плохо. Запутаться > будет легко. Ничего плохого. Одна другую дополняет. Что для одной - исключительная ситуация, для другой - нормальное поведение. > может и не быть. Но обламывать показ список всех клиентов только из-за > того что какому-то из главбухов забыли указать пол? Я не говорил про "забыли указать пол". Там вообще ПОЛЯ ТАКОГО НЕТ. > предполагал поле пола переименовали. Есть информация важная, есть > второстепенная. Важную - ты всегда будешь специально проверять (и не по > одному разу) а второстепенную можно отдать на откуп общему обработчику > ошибок. Выдача пустого результата здесь на мой взгляд более подходит чем > глобальный облом. Так это он и есть, глобальный облом. Только ты пытаешься его обработать, что безполезно, и пытаешься сделать при этом "хорошую мину". Типа - какого пола оно мы, к сожалению, не знаем, но может вы захотите вступить с ним в брак, авось вам понравится > Ну почемуж неправильно? Оглянись вокруг - сколько программ написано на > языках не имеющих механизма исключений вообще. И ведь работают! И > поддерживаются эти программы. Или вы на таких языках в принципе не О! Это- свежая струя в споре. Давай попробуем перечислить языки и понять, в каких есть исключения, в каких нет. Если тех, где нет окажется больше, значит исключения не так уж и важны. (скриптовые языки не берем) я начинаю, языки в которых есть exceptions: С++ Java (common) Lisp Python Delphi .... Теперь твой ход. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2007, 01:14 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
White Owl пишет: > возвращать ноль из пустого стека это традиция овеяная десятилетиями. В за... нафиг такие традиции. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2007, 01:16 |
|
||
|
Исключения: за и против
|
|||
|---|---|---|---|
|
#18+
Касательно исключений и COM. Как можно вот такое реализовать без исключений и goto ? Код древний и не самый качественный/удачно написанный, сейчас пишу другим стилем и т.д. НО такая задача все равно будет решаться похожим образом: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2007, 02:53 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34376154&tid=2029270]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
155ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
84ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 485ms |

| 0 / 0 |
