与C中的argp互斥的选项

时间:2016-07-14 22:38:19

标签: c gcc glibc argp

有人知道如何在C中使用argp指定互斥选项吗?有没有可以使用的技巧?

修改

什么是互斥选项?

假设你有一些命令行utility。您键入utility --help,输出如下所示

utility [-a|-b] 

选项-a-b是互斥的,因为无法将它们一起指定,即指定-a会排除使用-b。同样适用于-b。如果使用它,则无法指定-a。换句话说,只有以下内容是可能的:

utility -autility -b

argp文档来看,似乎无法指定此类选项。所以问题是人们用什么技巧来指定这种选择?我确信在某人的经历中不止一次出现这种情况。

2 个答案:

答案 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