有人知道如何在C
中使用argp指定互斥选项吗?有没有可以使用的技巧?
修改
什么是互斥选项?
假设你有一些命令行utility
。您键入utility --help
,输出如下所示
utility [-a|-b]
选项-a
和-b
是互斥的,因为无法将它们一起指定,即指定-a
会排除使用-b
。同样适用于-b
。如果使用它,则无法指定-a
。换句话说,只有以下内容是可能的:
utility -a
或utility -b
。
从argp文档来看,似乎无法指定此类选项。所以问题是人们用什么技巧来指定这种选择?我确信在某人的经历中不止一次出现这种情况。
答案 0 :(得分:0)
我不知道argp是否具有您想要的功能,但您确定要它吗?你将不得不描述这种关系,并提供一个信息,不是吗?
传统上,getopt
只解析参数。您无法指定强制,可选或哪些内容。 getopt
循环遍历argv
,依次处理每个选项(和参数)。完成后,您将检查结果并处理任何冲突。
switch(ch) {
case 'a': foo = true; break;
case 'b': bar = true; break;
}
if( foo && bar ) {
errx(EXIT_FAILURE, "foo and bar cannot be used together");
}
看起来简单易懂。我不想尝试在选项字符串语法中表达它。
答案 1 :(得分:0)
具有两个互斥选项-a
和-b
的程序通常不会阻止用户在命令行上同时指定这两个选项。
相反,程序会解析-a
然后设置一些内部变量,可能是opt_ab = 1
。稍后解析-b
时,变量将设置为opt_ab = 0
。这将是命令行中的最后一个选项生效。
这是在绝大多数命令行工具中完成的。例如,你有:
$ ls -1 -C
VS
$ ls -C -1