我使用 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,但是用户可能只是在命令行上传递了这个值,如果值超出范围,我想打印一条单独的错误消息。