用于C/Unix的参数解析助手

eph*_*ent 37 c command-line parsing

我知道以下内容:

  • 令人尊敬的 getopt(3)
  • 扩展 getopt_long
  • glibc argp用于Unix风格的参数向量的解析器
  • 来自GNOME项目的popt(或其在Glib中的精神继承者)

我确信还有更多我没有使用过甚至没有听过的; 快速谷歌搜索显示Gopt,argtableOptlist.

就个人而言,我argp最喜欢,并且我使用getopt/ 编写的每个程序getopt_long(超出某个复杂的基线)都已转换为使用argp.它比所有GNU风格的约定更加广泛可用popt,比getopt_long文档更强大,更灵活.在缺点方面,它远非最容易使用(由于非常灵活),并且支持它的代码非常冗长(C中的许多内容也是如此).

你用了什么,为什么?

是的,我的意思是C而不是C++.有大量的C++解析器,但我不使用C++.

约翰米利金指出,popt不再维持.我列出它是因为许多程序仍在使用它 - 包括AbiWord,rpm,rsync和samba - 尽管Gnome努力迁移.但我现在也添加了一个指向Glib的参数解析器的链接.


对于C++参数解析,请参阅问题C++有哪些参数解析器库?

dmc*_*kee 15

GNU有gengetopt,它为选项数据结构生成代码,getopt_long代码用于解析命令行并填充结构.它相当容易学习并且运行良好.

作为奖励,您可以围绕代码传递选项结构,并在需要时避免全局存储.

它提供了GNU样式语义(显然),如果你不确定你的受众的构建环境,它就足够小,可以简单地包含在项目中.


Jam*_*ill 5

俗话说,“标准胜于更好”。所以我总是使用 getopt_long() 和任何非 GNOME/glibby 的东西,以及任何能做到这一点的东西。

出于同样的原因,我总是在 Python 应用程序中使用 optparse,尽管它相对于 getopt_long() 缺少很多功能……但这就是 Python 标准。

  • 我不能代表他们,但一般来说,我认为直接 C 程序会节省时间。我用 python 编写程序,如果需要的话,用 C 编写库。 (4认同)