c - 可以拆分/级联 getopt_long 吗?

标签 c linux command-line-arguments getopt

我有一个小型 C(不是 C++)应用程序,它使用 getopt_long 解析命令行参数。我想编写另一个应用程序,它共享许多元素(包括一些常见的命令行参数),但也有一些独特的东西。作为其中的一部分,我想将命令行解析分为常见的(在静态库中)和特定于应用程序的。

是否可以以某种方式级联调用具有不同选项集的 getopt_long ,这样,如果“外部”调用(特定于应用程序的选项)无法识别某个选项,它可以尝试调用通用选项选项解析器,不会向用户打印任何错误,除非两者都无法识别该选项?这必须在逐个选项的基础上完成,因为用户能够以任何顺序传递选项。

我喜欢 getopt 静态定义的常量选项查找表的简单性。我知道我可能可以动态生成一个合并表,然后只调用 getopt 一次,但这似乎更痛苦,我不想这样做。

到目前为止,我对文档的阅读看起来并不乐观。

最佳答案

然后我会考虑使用 argp来自 GNU libc 的 API。

Argp 解析器可以组合,参见the example 4 。因此,您可以将公共(public)部分放在一个解析器中(在您的共享库中),并将特定于应用程序的解析器放在另一个解析器中。

或者,也可以考虑Glib (来自 GTK,但可以独立使用)及其 command line option parsing (因为 GOptionContext-s 可以包含多个带有 g_option_context_add_group ... 的 GOptionGroup-s)

关于c - 可以拆分/级联 getopt_long 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23122367/

相关文章:

rust - 如何为 clap_app! 的参数指定默认值宏观?

c - 分配给局部堆栈变量的堆栈偏移量是否曾被重用,例如万一它死了或者超出范围了?

对 *char 的字符分配不起作用

C struct typedef 和声明导致指针错误

linux - SysV 消息队列数量增加

linux - 是否可以使用程序输出作为大括号扩展的值?

linux - 混合静态库和共享库

c - 在 ARM macOS 上,当显式 raise() 信号时,某些返回地址在堆栈上会出现乱码

cocoa——确定启动工具的目录?

c - argv 字符串上的 malloc 错误