Я использую GLib для анализа некоторых параметров командной строки. Проблема в том, что я хочу сделать две из этих опций обязательными, чтобы программа закрывалась с помощью экрана справки, если пользователь их опускает.
Мой код выглядит так:
static gint line = -1;
static gint column = -1;
static GOptionEntry options[] =
{
{"line", 'l', 0, G_OPTION_ARG_INT, &line, "The line", "L"},
{"column", 'c', 0, G_OPTION_ARG_INT, &column, "The column", "C"},
{NULL}
};
...
int main(int argc, char** argv)
{
GError *error = NULL;
GOptionContext *context;
context = g_option_context_new ("- test");
g_option_context_add_main_entries (context, options, NULL);
if (!g_option_context_parse(context, &argc, &argv, &error))
{
usage(error->message, context);
}
...
return 0;
}
Если я опущу один из этих параметров или оба в командной строке, g_option_context_parse () все равно будет успешным, а значения (строка и / или столбец), о которых идет речь, будут по-прежнему равны -1. Как я могу сказать GLib об ошибке при разборе, если пользователь не передает обе опции в командной строке? Возможно, я просто слепой, но мне не удалось найти флаг, который я мог бы вставить в свою структуру данных GOptionEntry, чтобы сказать, чтобы сделать эти поля обязательными.
Конечно, я мог бы проверить, равна ли одна из этих переменных -1, но тогда пользователь мог просто передать это значение в командной строке, и я хочу напечатать отдельное сообщение об ошибке, если значения выходят за пределы диапазона.