Глава 22. Обработка исключительных ситуаций_______________________583
Борьба с ошибками в С
Прежде чем углубляться в детали синтаксиса обработки исключительных ситуаций, полезно взглянуть на некоторые более традиционные способы, с помощью которых программы на С (и программы на C++ до эпохи появления механизма обработки исключительных ситуаций) управлялись со сбоями. (Обработка исключительных ситуаций способна на большее, чем просто перехват ошибочных состояний. Но поскольку программисты чаще всего используют ее именно для обработки ошибок, то в этой главе речь пойдет в основном об этом).
Программа, которая не умеет обрабатывать исключительные ситуации, имеет в своем распоряжении несколько способов обнаружения и обработки сбойных состояний. В следующем кратком обзоре приведены наиболее общеупотребительные из традиционных стратегий борьбы с ошибками.
Возврат функцией кода ошибки. Несомненно, самый обычный способ сигнализации об ошибке в функции или методе объекта — это просто возврат определенного значения, которое указывает, что не все благополучно. Этим приемом пользуются все программисты; в конце концов, именно таким образом передает сообщения об ошибках большая часть библиотечных функций С. Например, класс в листинге 22.1 имеет единственный метод, который вычисляет длинное целое число, используемое в дальнейшем где-то внутри программы.
/'/ Наш гипотетически полезный класс
class AUsefulClass {
public:
long CalcAUsefulValue()
{
Производит некую деятельность и возвращает значение
)
// Теперь попробуем класс в деле AUsefulClass MyVar;
long lAUsefulValue = MyVar.CalcAUsefulValueО;
if (lAUsefulValue != 0)
cout « "Значение равно " « lAUsefulValue « "\n";
else
cout « "Ошибка!\n";
!
Эта программа должна вернуть в качестве результата вычисленное значение или ноль в случае ошибки. Приведенный фрагмент кода проверяет возвращаемое значение и, если оно равно нулю, выводит сообщение об ошибке.
Эта методика прекрасно работает, за исключением тех случаев, когда ноль становится потенциально допустимым возвращаемым значением — тогда