Это хорошая практика использовать выход в void функции для ошибки?

0

Я использую exit в функции C++ void, если файл не открывается. Это хорошая практика?

 void ReadData()
 {
      ofstream myfile ("example.txt");
      if (! myfile.is_open())
      {
            cout << "Unable to open file";
            exit(0);
      }
      else {
            myfile << "This is a line.\n";
            myfile << "This is another line.\n";
            myfile.close();
      }
 }
  • 3
    Я бы сказал, что это очень плохая практика. Я предлагаю вернуть значение, чтобы указать успех или неудачу. Если это невозможно, выведите исключение.
  • 0
    Также, если вам действительно необходимо выйти из-за невозможности открыть файл, код выхода должен быть больше нуля.
Показать ещё 4 комментария
Теги:
exit

4 ответа

5

Это закончит программу, которая будет немного жесткой, если вызывающий может справиться с ошибкой и продолжить. Выход с нулем (с указанием успеха) - очень плохая идея.

Обычный способ сообщить об ошибке в C++ - это выброс исключения. Затем вызывающий может выбрать, обрабатывать ли это или игнорировать его и, возможно, прекратить выполнение программы.

3

Как правило, функция многократного использования не должна прерывать или выходить из программы, если вы не знаете, что вызывающий абонент не сможет справиться с отказом каким-либо разумным способом. В противном случае, ваш "абонент" будет "грубым" выйти из-за сбоя, с которым может обращаться вызывающий.

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

Вместо того, чтобы выйти из него, подумайте о возврате кода ошибки или вместо исключения исключения.

1

Если вы решите использовать exit, вы захотите использовать что-то отличное от 0, например

exit(1);

Хорошо, что сценарий, вызывающий вашу программу, может легко обнаружить ошибку с кодом возврата.

1

Если вы планируете писать код, который будут использовать другие, использовать exit() не рекомендуется. В худшем случае это может вызвать у вас проблемы со своим клиентом или пользовательской базой.

Пример. Недавно была коммерческая библиотека базы данных, которая использовала этот подход для выхода из приложения, если что-то пошло не так. Разумеется, было много жалоб пользователей библиотеки, и высокомерие, которое авторы показали относительно этого, в основном помещало их в аут с их пользователями.

Итог заключается в том, что вам не следует (автор библиотеки) решить вытащить коврик из-под запущенной программы только потому, что вы чувствуете, что ошибка серьезная. Вместо этого верните ошибку или выбросите исключение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню