为何GNU编码标准更倾向于getopt_long而非argp?
为何GNU编码标准更倾向于getopt_long而非argp?
我无法理解GNU编码标准中4.2节——编写健壮程序的如下内容:
使用getopt_long解析参数,除非参数语法使其不适用。
我的理解是getopt属于POSIX标准,而getopt_long是GNU专属工具。那么为何GNU项目不选择argp作为参数解析器?Argp是GNU libc的一部分,相比getopt_long具备诸多优势:
Argp提供了常用getopt接口所没有的功能,包括自动响应‘--help’和‘--version’选项并生成输出(符合GNU编码标准)。使用argp可降低程序员忽略实现这些额外选项或未及时更新的概率。
Argp还支持将多个独立定义的选项解析器合并为一个,协调其中的冲突并使结果看起来无缝衔接。库可以导出argp选项解析器,用户程序可将其与自身的解析器结合使用,减少开发工作量。部分程序可仅使用库导出的参数解析器,从而为库实现的抽象功能提供一致且高效的参数解析。
我原本认为多数讨论会围绕可移植性展开,但存在两点疑问:
- 我未找到
getopt_long(GNU专属函数,非POSIX的getopt)相比argp具备更高可移植性的具体案例 - 我未在任何GNU参考文献中找到argp可移植性低于
getopt_long的相关说明
内容的提问来源于stack exchange,提问作者Scott Christensen
相关产品推荐
相关产品推荐

