Re: try-catch
От: Ассистент Россия  
Дата: 02.05.04 05:42
Оценка:
Здравствуйте, Blitz, Вы писали:

B>Все эти try — catch... больше всего пугает throw...


B>Мне легче дополнительный if(blah-blah-blah){ kill them all } написать, нежели даже пытаться писать с try — catch..


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

Например, разборщик текстов, имеющий:

main(void) - головная функция
parser_text(char *file_name) - парсер всего текста
parser_str(char *str) - парсер отдельной строки


Логика вызова такая: main -> parser_text -> parser_str
В parser_str:
char ss[16]; // строка с ошибкой
int pos=0; // текущая позиция в строке
try{
  // Код потенциально пораждающий ошибку
   ...
  pos++;
}
catch(...){
  // Поймали ошибку, передаем информацию об ошибке вызывающей функции
  itoa(ss,pos,16);
  throw ss;
}


В parser_text:
int pos=0;
char error[50]; // текст ошибки
try{
  // Парсер строки
  parser_str(str);
  ...
  pos++;
}
catch(char * ss){
  // Поймали ошибку, передаем информацию об ошибке вызывающей функции
  // добавляем информацию на данном уровне в переменную error
  ...
  throw error;
}



В main:
try{
  // Парсер строки
  parser_text(str);
}
catch(char *ss){
  // Выводим ошибку
  cout << "Ошибка в строке" << ss;
}
Человека с характером трудности привлекают, потому что только при помощи них он может осознать свой потенциал. (c)Шарль де Голль
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.