Глава 22. Обработка исключительных ситуаций________________________585

вращаемое значение, а через один из своих аргументов, единственное назначение которого в этом и состоит. При использовании этой стратегии объявление функции Add о из предыдущего раздела могло бы выглядеть следующим образом (заметьте, что аргумент ErrorCode — код ошибки — используется с операцией ссылки, так как эта переменная должна быть модифицируемой; с тем же успехом можно было бы использовать указатель на ErrorCode).

unsigned short Add(unsigned short addendl, unsigned short addend2, shorts ErrorCode) ;

В качестве альтернативы можно предложить возвращать через аргумент результат сложения, а код ошибки — через возвращаемое значение. Очевидно, что это вариация на ту же тему:

short Add(unsigned short addendl, unsigned short addend2, unsigned shorts Result) ;

Такая стратегия решает проблему изыскания свободных значений для кодов ошибок. Однако она не снимает остальные проблемы — программист по-прежнему должен запоминать массу значений кодов ошибок и не забывать контролировать содержимое возвращаемой переменной.

Глобальная переменная ошибки. Вместо передачи переменной ошибки в функцию или метод можно просто ввести глобальную переменную ошибки. Этот способ освобождает пользователя функции от необходимости передачи ей дополнительного аргумента; однако достигнутую экономию трудно рассматривать как грандиозную победу производительности. Листинг 22.2 демонстрирует, как используется этот прием.

h05851.jpg

// Необходимые заголовки ftinclude <limits.h> ttinclude <iostream.h>

// Объявление глобальной переменной ошибки short ErrorCode;

unsigned short Add(unsigned short addendl, unsigned short addend2) {

unsigned long sum = addendl + addend2;

if (sum > USHRT MAX) ErrorCode == -1;

return (unsigned short) sum;

>