linux - 为什么 GCC(和其他工具)不遵循 GNU 命令选项约定准则?

标签 linux gcc styles command-line-arguments gnu

我正在对接受命令行选项的程序进行一些维护。有单字母选项,也有长选项。目前,长选项前面有一个连字符。

许多工具的长选项都有双连字符。为了与现有内容保持一致,我查看了一些 GNU 工具,发现长形式混合使用了单连字符和双连字符。例如,GCC 编译器有 --help--version-std-funroll-loops .

所以我搜索了一些关于此事的文档,发现 this GNU document 。在那里,GNU 对长选项的风格建议是以两个连字符开头。

现在,我想知道为什么 GNU 工具不遵循这些 GNU 建议?我认为这是向后兼容性的问题,但还有更多吗?

在我编写的程序中,当更改选项语法时,我通常保留旧形式的功能但未记录,或者至少给出弃用警告。对于 GCC(和其他)程序来说不可能这样做吗?

最佳答案

有很多理由不改变:

  • 实际上有数百万(可能更多?)使用现有命令行选项的配置脚本和构建文件。既有最近的,也有很旧的。
  • 人们已经习惯了当前的格式,因此多年来大多数程序员都会出于习惯而使用他们已经知道的内容。
  • 参数解析代码通常很复杂,更改它只是引入错误的另一个机会。
  • 旧的向后兼容性单个连字符长选项会与新的多个短选项组合相冲突,因此向后兼容性很困难。
  • 在此处插入更多内容。

更改原因:

  • 遵循许多应用程序尚未遵循的约定。

简而言之,约定是好的,最好应该遵循新的东西,但通常不值得仅仅为了一致性而改变东西。

关于linux - 为什么 GCC(和其他工具)不遵循 GNU 命令选项约定准则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13899587/

相关文章:

regex - 来自 txt 文件中列的 GREP 值

c++ - gnu gcc 如何抑制警告 : ‘typedef’ was ignored in this declaration [enabled by default]

c - 在 C、GCC 中将类型名称作为字符串获取

c - 我如何让 C 识别未正确安装的库?

javascript - 通过 javascript 的 IE/Firefox 风格更新不起作用

html - 使用 CSS,我可以在该对象外指定背景图像吗?

linux - Suse中的malloc/free算法

java - 如何在 Ubuntu 上使用 Mina 增加可用套接字?

linux - 参数列表太长错误 rm 命令

css - 如何摆脱 JavaFX 2 中 Pane 分隔符内的拆分 Pane 分隔符中的三个小点?