0

有谁知道如何用argp in指定互斥选项C?有什么技巧可以使用吗?

编辑

什么是互斥选项?

假设您有一些命令行utility。你输入utility --help,输出看起来像这样

utility [-a|-b] 

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

utility -autility -b

argp文档看来,似乎不可能指定这种选项。所以问题是人们使用什么技巧来指定这种选项?我敢肯定,在某人的经历中不止一次需要这样做。

4

2 回答 2

0

具有两个互斥选项-a和的程序-b通常不会阻止用户在命令行上同时指定这两个选项。

相反,程序会解析-a然后设置一些内部变量,也许是opt_ab = 1. 稍后进行解析-b时,将设置变量opt_ab = 0。这将是命令行上最后一个生效的选项。

这就是在绝大多数命令行工具中完成的方式。例如,您有:

$ ls -1 -C

对比

$ ls -C -1
于 2016-07-16T06:54:32.887 回答
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");
}

这看起来简单易懂。我不想尝试用选项字符串语法来表达它。

于 2016-07-15T05:02:51.313 回答