我可以使用getopt按特定顺序处理选项吗?

时间:2014-10-20 19:43:08

标签: c getopt

我正在实现一个命令行工具,我需要能够处理一堆选项。一些选项必须在程序完成后终止程序。例如,我有选项a,b和c。如果a和b在完成后终止,我给出命令

./myprogram -bca [file] 

有没有办法在这样的情况下使用getopt()?

给出“a”优先级

编辑:

我通过在选项上运行开关来解决这个问题,如果选择了一个选项则设置一个标志。然后将所有标志发送到一个按顺序查看标志的函数。

2 个答案:

答案 0 :(得分:1)

没有办法让getopt本身处理这个问题。最简单的方法是创建一个标志位图,如@tfahl建议的那样。

答案 1 :(得分:1)

有两种主要方法可以处理getopt()读取的选项。一个是执行与选项相关联的操作,因为getopt()在读取其余选项之前识别它;另一种是在进行任何处理之前阅读所有选项。 (程序不经常实现混合解决方案;一些选项在解析参数时起作用,但其他选项只是被注意到,并且在处理参数之后采取的操作。)

在您的情况下,您似乎需要在进行任何处理之前解析所有选项。如果-a-b在执行操作后终止程序,那么它们是互斥的选项,您应该将其诊断为错误地调用程序。您需要决定是否允许-c以及-a-b

通常,您将拥有一起工作所需的选项对,或者您需要知道在决定执行操作之前是否已指定其中一个,另一个或两者。另一个需要考虑的问题是,如果在命令行上重复选项,这意味着什么。