C++ 如何使用C++;getopt_long()如果我有26个以上的选项?

C++ 如何使用C++;getopt_long()如果我有26个以上的选项?,c++,C++,这是一个相当假设的问题,但假设我有3个长参数,它们以同一个字母开头 --parse or -p --prune or -r --pivot or -i 最终,我将开始用完有意义的单个字母,更重要的是,很难在配置中分配有意义的内容 {"parase", no_argument, 0, 'p'}, {"prune", no_argument, 0, 'r'}, {"pivot", required_argument, 0, 'i'} 在这些情况下,什么是最佳做法?我建

这是一个相当假设的问题,但假设我有3个长参数,它们以同一个字母开头

--parse or -p
--prune or -r
--pivot or -i
最终,我将开始用完有意义的单个字母,更重要的是,很难在配置中分配有意义的内容

{"parase", no_argument,       0, 'p'},
{"prune",  no_argument,       0, 'r'},
{"pivot",  required_argument, 0, 'i'}

在这些情况下,什么是最佳做法?

我建议您看看。它是一个用于获取命令行参数的通用库。非常容易使用。

您不必为
val
成员使用可打印字符。此外,它是
int
,而不是
char
。它应该只是帮助您确定选项。(也就是说,您不必有相应的shorty)。

数字0-9可用于。想象一下,一个数据压缩程序要么接受
-compression=[0-9]
,要么只接受
-[0-9]
(不过我不知道这是否适用于getopt)

此外,也可以使用大写字母


我知道这是一个假设性的问题,但有这么多选项,程序可能做得太多或需要配置文件。

您可以选择大写和小写,提供52个短选项,但是许多接受长选项的程序甚至不为某些选项分配短选项,强制用户仅使用长选项,这是正常的。

如何
getopt_long_only()
?这是一个注释而不是答案。您能否给出一个仅指定长选项的代码示例?因为当我看到中给出的示例时,我不知道如何进行切换。谢谢。@wfoolhill GNU tar例如有选项
--backup
--checkpoint
--force local
,还有许多其他选项,它们没有与short等价的选项。谢谢,但是使用的是而不是getopt,而且从其源代码中很难理解argp是如何工作的。无论如何,我仍然没有找到任何显示如何仅使用长选项的简短示例。@wfoolhill难道您不能将0作为
struct option
中的最后一个字段传递吗?如果我遵循getopt_long,但我想用必需的参数(而不是标志)指定长选项“param”,gcc会抱怨,因为“开关(c)”中使用了“c”应该是一封信。参见示例。+1这是正确答案。这为您提供了sizeof(int)选项。@qwerty9967,
sizeof(int)
不多;-)它是2次方8*sizeof(int);-)@克瑞林,比52号大了一点。您是否曾经编写过需要2个以上pow 8*sizeof(int)选项的程序?@qwerty9967,我想说的是,我希望
sizeof(int)
在64位体系结构上类似于4。这也不算多。当然,你不必仅仅因为可以就使用所有无数的选项。@qwerty9967,简而言之,你的意思可能是maxint(也就是说,大约
1)