Доброе время суток!
В ходе разработки некоторой библиотеки возник вопрос каким образом нужно обрабатывать ошибки времени исполнения. Как я понимаю, все ошибки данного типа можно разделить на 2 больших группы:
1. ошибки, возникающие по не зависящим от программы обстоятельствам;
2. ошибки, являющиеся следствием некорректной работы самой программы.
С первой группой ошибок все понятно : функция, в которой возможно возникновение такой ошибки, сообщает о результате операции с помошью возвращаемого значения.
Со второй группой ошибок все намного сложнее и вопрос связан именно с ней. Ошибки этой группы связаны с некорректностью переданных функции аргументов (например, вместо указателя на строку передается NULL). Внимание вопрос: что делать в случае возникновения такой ошибки? Вот какие варианты я нашел в реальных библиотеках:
1. Входные параметры не контролируются. Программа сама завершиться по причине Segmentation Failed (ex.: memcpy() в glibc).
2. Функция, обнаружившая некорректность входных аргументов, выводит в журнал сообщение об ошибки и завершает исполнение программы. (ex.: g_error() в glib).
3. Промежуточный вариант: если функция обнаружила некорректность переданных аргументов, то она не выполняет никаких действий, а выполняет return. Также может происходить запись в журнал (stderror). (ex.: linux kernel).
На чём остановиться, господа?