|
Ошибки функций... и последствия, C builder 2006 |
|
|
|
Dec 21 2011, 17:32
|

Гуру
     
Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514

|
Даже не знаю, как обозвать тему  Все что угодно соединяется. Выдается ID вызываем функцию, которая в канал связи или пытается передать, или пытается получить оттуда но что-то не получилось Функция вернет ошибку (или количество байт не то, которое ждали) Таких вызовов много Как правильно сделать одну секцию ошибок, которая сделает (в зависимости от ошибки) одно действие, или несколько секций кода для разных ошибок? Как это правильно делается, дабы каждый раз не плодить условий при вызове функций обмена?
|
|
|
|
|
 |
Ответов
|
Dec 21 2011, 20:29
|
Знающий
   
Группа: Свой
Сообщений: 781
Регистрация: 3-10-04
Из: Санкт-Петербург
Пользователь №: 768

|
Цитата(toweroff @ Dec 21 2011, 22:18)  Обойтись можно средствами C или только C++ (try, catch, throw)? Как удобнее .....? Привычка делать на C рождает вопросы  Все равно независимо от использования С или С++ Вы переберете все ошибки, которые хотите обработать. Разница, насколько я помню, в том, что в С Вы должны заранее задать все ошибки и их обработать, с необработанными Вы сами решите, как поступать; а в С++ есть механизм передачи необработанных ошибок в объект-родитель, можете добавить обработчики в объект-родитель. Как будет короче - виднее только Вам.
|
|
|
|
|
Dec 21 2011, 20:42
|

Гуру
     
Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514

|
Цитата(Tiro @ Dec 22 2011, 00:29)  Все равно независимо от использования С или С++ Вы переберете все ошибки, которые хотите обработать. Разница, насколько я помню, в том, что в С Вы должны заранее задать все ошибки и их обработать, с необработанными Вы сами решите, как поступать; а в С++ есть механизм передачи необработанных ошибок в объект-родитель, можете добавить обработчики в объект-родитель. Как будет короче - виднее только Вам. объекта-родителя НЕТ есть просто функция, которая _может_ возвратить некоторую ошибку хрошо, с кодами ошибок и с описаниями для пользователя - не вопрос как (и можно ли) это сделать на C ? это, фактически, вопрос не только к билдеру, но и к embedded, типа 32flash и 4-8RAM
|
|
|
|
|
Dec 21 2011, 20:57
|
Знающий
   
Группа: Свой
Сообщений: 781
Регистрация: 3-10-04
Из: Санкт-Петербург
Пользователь №: 768

|
Цитата(toweroff @ Dec 21 2011, 23:42)  объекта-родителя НЕТ есть просто функция, которая _может_ возвратить некоторую ошибку хрошо, с кодами ошибок и с описаниями для пользователя - не вопрос как (и можно ли) это сделать на C ? это, фактически, вопрос не только к билдеру, но и к embedded, типа 32flash и 4-8RAM Обработка должна выполняться в вызывающей функции, так как вызываемая может и не знать контекста ошибки. Можно вести что-то вроде связанного списка кодов завершения, в том числе ошибок, а при возникновении ошибки обрабатывать связанный список назад. Отступление: другой интересный механизм был предложен в сервере Apache, там место под локальные данные выделялось из динамической памяти и при неустранимой ошибке все это просто уничтожалось.
|
|
|
|
|
Dec 21 2011, 21:16
|

Гуру
     
Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514

|
Цитата(Tiro @ Dec 22 2011, 00:57)  Обработка должна выполняться в вызывающей функции, так как вызываемая может и не знать контекста ошибки. Можно вести что-то вроде связанного списка кодов завершения, в том числе ошибок, а при возникновении ошибки обрабатывать связанный список назад. Отступление: другой интересный механизм был предложен в сервере Apache, там место под локальные данные выделялось из динамической памяти и при неустранимой ошибке все это просто уничтожалось. да понятно, что функция что-то вернет, с обработкой тоже ну не ваять же каждый раз Код if (send2channel(structure, sizeof(structure)) != sizeof(structure)) goto _l_fullass; или Код if (send2channel(structure, sizeof(structure)) == FULLASS) goto _l_fullass; потому как дальше нет смысла что-то делать
|
|
|
|
|
Dec 21 2011, 21:42
|
Знающий
   
Группа: Свой
Сообщений: 781
Регистрация: 3-10-04
Из: Санкт-Петербург
Пользователь №: 768

|
Цитата(toweroff @ Dec 22 2011, 00:16)  да понятно, что функция что-то вернет, с обработкой тоже ну не ваять же каждый раз Код if (send2channel(structure, sizeof(structure)) != sizeof(structure)) goto _l_fullass; или Код if (send2channel(structure, sizeof(structure)) == FULLASS) goto _l_fullass; потому как дальше нет смысла что-то делать Это Вы ваяете в вызываемой функции, тут все равно, какой язык. С трассировкой вызовов =============== send2channel (...) { ... if (received_counter != requested_counter) return ERROR_PACKET_SIZE; ... } caller_send2channel (...) { if (!send2channel(...)) handle_error (*from_caller, *error_queue и прочее) } ========== Это если есть трассировка цепочки вызовов. Так как бы Вы хотели обработать ошибку, каким обработчиком-то? Или хотите, чтобы компилятор все сам сделал? Все равно придется придумать механизм трассировки вызовов и отката назад по ошибкам. Это может быть отдельный модуль, может быть обработчик в вызывающей функции, все равно. Что С, что С++ без разницы. Такое ИМХО.
|
|
|
|
Сообщений в этой теме
toweroff Ошибки функций... и последствия Dec 21 2011, 17:32 aaarrr Да, обработка ошибок на каком-то этапе неизбежно у... Dec 21 2011, 21:28 XVR Вам нужно, что бы было одно место, через которое в... Dec 22 2011, 10:33 kolobok0 Цитата(toweroff @ Dec 21 2011, 21:32) ...... Dec 23 2011, 08:21 _Pasha Цитата(toweroff @ Dec 21 2011, 20:32) Даж... Dec 23 2011, 12:32 toweroff Поясню
Есть функция (точнее - несколько), в котор... Dec 23 2011, 14:16 _Pasha Цитата(toweroff @ Dec 23 2011, 18:16) Так... Dec 25 2011, 05:33  toweroff Цитата(_Pasha @ Dec 25 2011, 09:33) Видим... Dec 25 2011, 08:53 Flexz Да нормально вполне, если не ошибаюсь, например, в... Dec 23 2011, 15:36 aaarrr Цитата(Flexz @ Dec 23 2011, 19:36) Кодret... Dec 25 2011, 18:58 toweroff Я и спрашиваю про ББ, про embedded просто удочка з... Dec 23 2011, 15:42 Flexz Цитата(aaarrr @ Dec 25 2011, 22:58) Это е... Dec 26 2011, 06:39 aaarrr Ресурсом совсем не обязательно являются объекты в ... Dec 26 2011, 07:43 Flexz Ну это понятно. Подход-то от этого не меняется. Dec 26 2011, 07:54
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|