我想根据特定参数是否存在,委托给几个可能的参数列表中的一个,大致如下:

./test --do-thing-1 --option-A=7 --common-option --option-B=2 # options C and D not valid
./test --do-thing-2 --option-C=9 --common-option --option-D=1 # options A and B not valid

而我能想到的最好的方法是整齐地做到这一点。 main() 处理所有常用选项,并决定调用几个函数中的哪一个来处理其余部分。

请注意,我不想限制顺序,以便常见选项只能首先出现。

我的问题是,如果我重置 optind 在第二次解析参数之前到1, getopt_long 通过将无效字符串传递给 strncmp -所以我想我不应该惹optind。

我有一个谷歌,找不到任何关于是否可以跳转的参考 getopt_long 参数列表(我知道这是可能的 getopt),如果是,我该怎么做?

我宁愿不使用任何非标准库。(语言是纯c,没有c++请)

有帮助吗?

解决方案

我的问题是,我没有设置我的最后一行 static struct option long_options[] 数组为零,设置此正确修复错误。

GNU getopt还需要 optind 要被重置为0而不是1,以便正确地重置其内部状态。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top