C / C ++的选项解析器?

时间:2009-03-12 04:32:14

标签: c++ c parsing command-line option

  

可能重复:
  What parameter parser libraries are there for C++?

我已经完成了一些工作,并且有很多用于命令行选项解析的库,但很难区分它们。有没有人有任何经验?是否比其他任何人更难/更好/更快/更容易/更好?或者我应该自己成长?

6 个答案:

答案 0 :(得分:18)

如果你想要一些完全跨平台的东西,我发现Boost::Program_Options库非常好。设置它有一些学习曲线,但是一旦掌握了它,它就会大大简化事情。

答案 1 :(得分:13)

出于多种目的,GNU getopt()getopt_long()函数是不错的选择。

GNU getopt()用于单字母选项参数,并且非常接近POSIX标准行为,并且可以通过设置环境变量POSIXLY_CORRECT来说服其行为更正统。区别在于GNU getopt()在第一个非选项参数之后识别选项参数,并置换参数以便在任何非选项参数之前处理所有选项参数。这有时很重要 - 尽管背景往往有点深奥。还有其他一些额外的技巧。

GNU getopt_long()是处理--help等长选项的最佳机制。它可以处理可选参数,匹配单字母选项和各种各样的东西。

还有许多其他软件包可以通过各种方式处理选项。

(Perl拥有大量的Getopt模块,反映了多年来投入了多少精力。)

您可以在What is the general syntax of a Unix shell command找到一些有用的额外信息。您还可以在Utility Conventions章节中阅读命令行约定的POSIX规范。

答案 2 :(得分:6)

boost::program_options非常好,并且有一个很好的C ++接口,可以检查选项参数是否具有某种类型(如'int')并将它们直接存储到变量中。

它还支持从配置文件加载“选项”,因此您可以免费获得配置文件解析器。这样,您可以非常轻松地允许从命令行覆盖所有配置设置,或者将所有命令行选项添加到配置文件中,这使其非常灵活。

答案 3 :(得分:2)

也有popt。

答案 4 :(得分:1)

如果您使用的是linux / unix,那么 getopt 就是您的选项解析器。适用于几乎所有版本的unix并且易于使用

答案 5 :(得分:1)

我在大多数情况下使用getopt_long()的系统实现,但是你可能需要更加便携,这禁止使用这种POSIX生物的舒适。

Here is the standard关于命令行选项的POSIX视图,如果你处于getopt()/ getopt_long()不可用的位置,需要自己滚动。您可能还想了解一下POSIX对帮助/选项摘要显示的看法(我无法找到指向该部分标准的链接)。

就个人而言,我不喜欢使用不使用-long-options的程序,因为记住短选项很痛苦,没有两个程序使用相同的选项。