23: poptBadOption(optCon, POPT_BADOPTION_NOALIAS),
24: poptStrerror(rc));
25: return 1;
26: }
27:
28: return 0;
29: }
26.4. Обработка ошибок
Каждая из функций popt
, которая может возвращать ошибки, возвращает целочисленные значения. В случае возникновения ошибки возвращается отрицательный код. В табл. 26.2 перечислены коды возможных ошибок. После таблицы дается подробное обсуждение каждой ошибки.
Таблица 26.2. Коды ошибок popt
Код ошибки | Описание |
---|---|
POPT_ERROR_NOARG | Отсутствует аргумент для данного параметра. |
POPT_ERROR_BADOPT | Невозможно проанализировать синтаксис аргумента параметра. |
POPT_ERROR_OPTSTOODEEP | Слишком глубокое вложение замещений имени параметра. |
POPT_ERROR_BADQUOTE | Несоответствие кавычек. |
POPT_ERROR_BADNUMBER | Невозможно преобразовать параметр в число. |
POPT_ERROR_OVERFLOW | Данное число слишком большое или слишком маленькое. |
POPT_ERROR_NOARG | Параметр, для которого требуется аргумент, был определен в командной строке, однако аргумент не был предоставлен. Эта ошибка может быть возвращена только функцией poptGetNextOpt() . |
POPT_ERROR_BADOPT | Параметр был определен в массиве argv , однако его нет в таблице параметров. Эта ошибка может быть возвращена только функцией poptGetNextOpt() . |
POPT_ERROR_OPTSTOODEEP | Совокупность замещений имени параметра имеет большую глубину вложений. На данный момент popt отслеживает параметры только до 10 уровня, чтобы избежать возникновения бесконечной рекурсии. Эту ошибку возвращает только функция poptGetNextOpt() . |
POPT_ERROR_BADQUOTE | В строке, прошедшей синтаксический анализ, было обнаружено несоответствие кавычек (например, была обнаружена только одна одинарная кавычка). Эту ошибку могут возвращать функции poptParseArgvString() , poptReadConfigFile() и poptReadDefaultConfig() . |
POPT_ERROR_BADNUMBER | Преобразование строки в число (int или long ) не было выполнено вследствие того, что строка содержит нецифровые символы. Эта ошибка возникает в том случае, когда функция poptGetNextOpt() обрабатывает аргумент типа РOРТ_ARG_INT или POPT_ARG_LONG . |
POPT_ERROR_OVERFLOW | Преобразование из строки в число не было выполнено вследствие того, что число было слишком большим или слишком маленьким. Подобно ошибке POPT_ERROR_BADNUMBER , эта ошибка может возникнуть только в том случае, если функция poptGetNextOpt() обрабатывает аргумент типа РОРТ_ARG_INT или POPT_ARG_LONG . |
POPT_ERROR_ERRNO | Системный вызов был возвращен вместе с ошибкой, а errno до сих пор содержит ошибку из системного вызова. Эту ошибку могут возвращать функции poptReadConfigFile() и poptReadDefaultConfig() . |
Приложения могут генерировать качественные сообщения об ошибках с помощью следующих двух функций.
const char * poptStrerror(const int error);
Эта функция принимает код ошибки popt
и возвращает строку с описанием ошибки, как и стандартная функция strerror()
.