Abort, Retry, Fail?
В предыдущих главах мы использовали для обработки ошибок функции вроде eprintf и estrdup – просто выводили некие сообщения перед тем, как прервать выполнение программы. Например, функция eprintf ведет себя так же, как fprintf (stderr,…), но после вывода сообщения выходит из программы с некоторым статусом ошибки. Она использует заголовочный файл <stdarg.h> и библиотечную функцию vfprintf для вывода аргументов, представленных в прототипе многоточием (…). Использование библиотеки stdarg должно быть начато вызовом va_start и завершено вызовом va__end. Мы еще вернемся к этому интерфейсу в главе 9.
Если аргумент формата оканчивается двоеточием (:), то eprintf вызывает стандартную функцию strerror, которая возвращает строку, содержащую всю доступную дополнительную системную информацию об ошибке. Мы написали еще функцию weprintf, сходную с eprintf, которая выводит предупреждение, но не завершает программу. Интерфейс, схожий с printf, удобен для создания строк, которые могут быть напечатаны или выданы в окне диалога.
Сходным образом работает estrdup: она пытается создать копию строки и, если памяти для этого не хватает, завершает программу с сообщением об ошибке (с помощью eprintf):