Я использую 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();
}
}
Это закончит программу, которая будет немного жесткой, если вызывающий может справиться с ошибкой и продолжить. Выход с нулем (с указанием успеха) - очень плохая идея.
Обычный способ сообщить об ошибке в C++ - это выброс исключения. Затем вызывающий может выбрать, обрабатывать ли это или игнорировать его и, возможно, прекратить выполнение программы.
Как правило, функция многократного использования не должна прерывать или выходить из программы, если вы не знаете, что вызывающий абонент не сможет справиться с отказом каким-либо разумным способом. В противном случае, ваш "абонент" будет "грубым" выйти из-за сбоя, с которым может обращаться вызывающий.
Например, функция, которая ищет данный файл, может выйти из строя, потому что файл не существует, но, возможно, файл является необязательным (например, файл кеша), и в этом случае отказ является безобидным для вызывающего.
Вместо того, чтобы выйти из него, подумайте о возврате кода ошибки или вместо исключения исключения.
Если вы решите использовать exit, вы захотите использовать что-то отличное от 0, например
exit(1);
Хорошо, что сценарий, вызывающий вашу программу, может легко обнаружить ошибку с кодом возврата.
Если вы планируете писать код, который будут использовать другие, использовать exit() не рекомендуется. В худшем случае это может вызвать у вас проблемы со своим клиентом или пользовательской базой.
Пример. Недавно была коммерческая библиотека базы данных, которая использовала этот подход для выхода из приложения, если что-то пошло не так. Разумеется, было много жалоб пользователей библиотеки, и высокомерие, которое авторы показали относительно этого, в основном помещало их в аут с их пользователями.
Итог заключается в том, что вам не следует (автор библиотеки) решить вытащить коврик из-под запущенной программы только потому, что вы чувствуете, что ошибка серьезная. Вместо этого верните ошибку или выбросите исключение.